本文共 6925 字,大约阅读时间需要 23 分钟。
新建了两个类//宝马320 public class BMW320 { public BMW320(){ System.out.println("制造-->BMW320"); } }
客户端:
public class Customer { public static void main(String[] args) { BMW320 bmw320 = new BMW320(); BMW523 bmw523 = new BMW523(); } }
结果:
另外一个例子:比如说, 客户需要买手机
public class Iphone { public void iphone () {}}public class Huawei { public void huawei () {}}
客户端的调用示例如下:
Iphone phone1 = new Iphone();phone1.iphone();Huawei phone2 = new Huawei();phone2.huawei();
这样的方式非常原始,也很简单,但是代码的逻辑不清晰,暴露的内容过多。
解决的方案:
抽象逻辑,提供接口
public interface Phone { void play();}
然后,将所有手机类都实现 Phone 接口,将暴露给客户端调用的逻辑都封装在 play 方法里。
public class Iphone implements Phone { @Override public void play() { System.out.println("给我一台Ipone"); }}
public class Huawei implements Phone { @Override public void play() { System.out.println("给我一台华为"); }}
那么,客户端需要知道的调用 API 就减少到了两种:
调用的逻辑就变简单了:
Phone phone1 = new Iphone();phone1.play();Phone phone2 = new Huawei(); phone2.play();
转存失败
产品类:
abstract class BMW { public BMW(){ } } public class BMW320 extends BMW { public BMW320() { System.out.println("制造-->BMW320"); } } public class BMW523 extends BMW{ public BMW523(){ System.out.println("制造-->BMW523"); } }
工厂类:
public class Factory { public BMW createBMW(int type) { switch (type) { case 320: return new BMW320(); case 523: return new BMW523(); default: break; } return null; } }
客户类:
public class Customer { public static void main(String[] args) { Factory factory = new Factory(); BMW bmw320 = factory.createBMW(320); BMW bmw523 = factory.createBMW(523); } }
结果:和最原始的一样,不过中间有工厂类,客户可以通过工厂类,创建需要的车辆
转存失败
2、 工厂方法模式
产品类:
abstract class BMW { public BMW() { }}
//宝马523public class BMW523 extends BMW {public BMW523() { System.out.println("制造-->BMW523"); }}//宝马320public class BMW320 extends BMW{public BMW320() { System.out.println("制造-->BM320"); }}
创建工厂接口:
public interface Factory { BMW createBMW();}
实现接口:
public class FactoryBMW320 implements FactoryBMW{ @Override public BMW320 createBMW() { return new BMW320(); } } public class FactoryBMW523 implements FactoryBMW { @Override public BMW523 createBMW() { return new BMW523(); } }
客户类:
public class Customer { public static void main(String[] args) { FactoryBMW320 factoryBMW320 = new FactoryBMW320(); BMW320 bmw320 = factoryBMW320.createBMW(); FactoryBMW523 factoryBMW523 = new FactoryBMW523(); BMW523 bmw523 = factoryBMW523.createBMW(); } }
抽象工厂模式代码
接口:
//发动机以及型号 public interface Engine { }
实现接口:
public class EngineA implements Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineB implements Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } }
接口:空调以及型号
public interface Aircondition { }
实现接口:
创建工厂的接口 :
public interface AbstractFactory { //制造发动机 public Engine createEngine(); //制造空调 public Aircondition createAircondition(); }
实现:为宝马320系列生产配件
public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } }
实现:为宝马523系列生产配件
public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }
客户:
public class Customer { public static void main(String[] args){ //生产宝马320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生产宝马523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }
转载地址:http://jahgn.baihongyu.com/