一、工厂模式
定义:工厂模式:为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
工厂方法
1、当一个类不知道它所必须创建的对象的类的时候;
2、当一个类希望由它的子类来指定它所创建的对象的时候;
3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮组子类是代理者这一信息局部化的时候。
二、抽象工厂模式
定义:定义了一个接口,用于创建相关或者有依赖关系的对象族,而无需明确指定具体类。
抽象工厂
1、一个系统应当不依赖于产品类实例被创立、组成和表示的细节,这对于所有形态的工厂模式都是重要的
2、这个系统的产品有至少一个的产品族
3、同属于一个产品族的产品是设计成在一起使用的,这一约束必须得在系统的设计中体现出来
4、不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节
啥都不说了,上代码。场景为制作Pizza,有各种口味的,使用抽象工厂方法,实现了不同风味的pizza在不同地域生产、包装、运输等等。
首先,Pizza抽象工厂
public interface AbsFactory {
public Pizza CreatePizza(String ordertype) ;
}
**然后,Pizza的工厂拓展类—LDFactory **
public class LDFactory implements AbsFactory {
@Override
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;
if (ordertype.equals("cheese")) {
pizza = new LDCheesePizza();
} else if (ordertype.equals("pepper")) {
pizza = new LDPepperPizza();
}
return pizza;
}
}
**然后,Pizza的工厂拓展类—NYFactory **
public class NYFactory implements AbsFactory {
@Override
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;
if (ordertype.equals("cheese")) {
pizza = new NYCheesePizza();
} else if (ordertype.equals("pepper")) {
pizza = new NYPepperPizza();
}
return pizza;
}
}
订购Pizza
public class OrderPizza {
AbsFactory mFactory;
public OrderPizza(AbsFactory mFactory) {
setFactory(mFactory);
}
public void setFactory(AbsFactory mFactory) {
Pizza pizza = null;
String ordertype;
this.mFactory = mFactory;
do {
ordertype = gettype();
pizza = mFactory.CreatePizza(ordertype);
if (pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
} while (true);
}
private String gettype() {
try {
BufferedReader strin = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("input pizza type:");
String str = strin.readLine();
return str;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
测试一哈
public class PizzaStroe {
public static void main(String[] args) {
OrderPizza mOrderPizza;
mOrderPizza=new OrderPizza(new LDFactory());
}
}
三、工厂方法模式和抽象工厂模式对比
1、工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广
2、工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
3、工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的优点:
1、系统可以在不修改具体工厂角色的情况下引进新的产品
2、客户端不必关心对象如何创建,明确了职责
3、更好的理解面向对象的原则,面向接口编程,而不是面向实现编程
---------------------
作者:BestWZR
来源:CSDN
原文:https://blog.csdn.net/zhimingshangyan/article/details/52349903
版权声明:本文为博主原创文章,转载请附上博文链接!
四、依赖抽象原则
1. 变量不要持有具体类的引用
2. 不要让类继承自具体类,要继承自抽象类或者接口
3. 不要覆盖类中已实现的方法