Java工厂方法的设计模式-面向对象-Java基础学习(二十八)

 

1.抽象工厂

抽象工厂:我们都知道,工厂,一般只有一个作用,那就生产,比如,吉利汽车厂,那就制造吉利汽

车,iphone手机制造厂就造iphone等等

所以可以用一个简单的方法概括,就是create();

2.具体汽车制造厂

具体汽车制造厂:实现了抽象工厂,具有实际的制造汽车的流程和方法等

3.抽象汽车

抽象汽车:汽车我们一般都知道,能跑,能放音乐,能导航,能转弯这些都是汽车的共性

4.具体汽车

抽象汽车:具体汽车实现了抽象汽车,具备其所有的功能,当然不同的汽车可能具备的功能还不一样

上述简单的做了介绍,大体而言就是,具体汽车厂制造相应的的汽车,比如:奥迪的工厂,制造奥迪汽

车,大众的工厂,制造大众的汽车等。

例子解析

上面我们已经很清晰的明白了他们之间的关系,所以接下来就用代码演示,将上面我们的想法和逻辑用代码表现出来:

(1)抽象汽车工厂

  1. package com.zengtao.demo.factory;
  2. /**
  3.  * 抽象工厂
  4.  */
  5. public abstract class CarFactory {
  6.   public abstract <T extends Car> T createCar(Class<T> cla);
  7. }

(2)具体汽车工厂

  1. package com.zengtao.demo.factory;
  2. /**
  3.  * 奥迪工厂
  4.  */
  5. public class AudiFactory extends CarFactory {
  6.   @SuppressWarnings("unchecked")
  7.   @Override
  8.   public <T extends Car> T createCar(Class<T> cla) {
  9.     Car car = null;
  10.     try {
  11.       car = (Car) Class.forName(cla.getName()).newInstance();
  12.     } catch (Exception e) {
  13.       e.printStackTrace();
  14.     }
  15.     return (T) car;
  16.   }
  17. }

(3)定义抽象的车

  1. package com.zengtao.demo.factory;
  2. public abstract class Car {
  3.   public abstract void drive();
  4.   public abstract void selfNagive();
  5.   public abstract void playMusic();
  6. }

(4)具体的车(奥迪q3)

  1. package com.zengtao.demo.factory;
  2. public class AudiQ3Car extends AudiCar {
  3.   @Override
  4.   public void drive() {
  5.     System.out.println("AudiQ3Car 已经制造成功");
  6.     System.out.println("AudiQ3Car drive");
  7.   }
  8.   @Override
  9.   public void selfNagive() {
  10.     System.out.println("AudiQ3Car selfNagive");
  11.   }
  12.   @Override
  13.   public void playMusic() {
  14.     System.out.println("AudiQ3Car playMusic");
  15.     System.out.println("");
  16.   }
  17. }

(奥迪q5)

  1. package com.zengtao.demo.factory;
  2. public class AudiQ5Car extends AudiCar {
  3.   @Override
  4.   public void drive() {
  5.     System.out.println("AudiQ5Car 已经制造成功");
  6.     System.out.println("AudiQ5Car drive");
  7.   }
  8.   @Override
  9.   public void selfNagive() {
  10.     System.out.println("AudiQ5Car selfNagive");
  11.   }
  12.   @Override
  13.   public void playMusic() {
  14.     System.out.println("AudiQ5Car playMusic");
  15.     System.out.println("");
  16.   }
  17. }

(5)调用

  1. package com.zengtao.demo;
  2. import com.zengtao.demo.factory.AudiFactory;
  3. import com.zengtao.demo.factory.AudiQ3Car;
  4. import com.zengtao.demo.factory.AudiQ5Car;
  5. public class Main {
  6.   public static void main(String[] str) {
  7.     // 创建工厂
  8.     AudiFactory audiFactory = new AudiFactory();
  9.     // 利用工厂制造q3车
  10.     AudiQ3Car audiQ3Car = audiFactory.createCar(AudiQ3Car.class);
  11.      // 利用工厂制造q5车
  12.     AudiQ5Car audiQ5Car = audiFactory.createCar(AudiQ5Car.class);
  13.     // 开始开车放音乐
  14.     audiQ3Car.drive();
  15.     audiQ3Car.playMusic();
  16.     audiQ5Car.drive();
  17.     audiQ5Car.playMusic();
  18.   }
  19. }
weinxin
我的微信
有问题微信找我
DannyWu

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

Protected with IP Blacklist CloudIP Blacklist Cloud