工厂模式
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。
优点:
1、将创建实例的工作与使用实例的工作分开
2、把初始化实例时的工作放到工厂里进行,使代码更容易维护。
3、使得修改代码时不会引起太大的变动,良好的扩展性。
简单工厂模式
1.创建共同的接口
//创建一个共同的接口 -- 键盘
public interface Keyboard {
public void makeKeyboard();
}
2.创建实现类
实现类1:Razer
public class Razer implements Keyboard{
//实现方法
public void makeKeyboard() {
System.out.println("制造了雷蛇键盘");
}
}
实现类2:Logitech
public class Logitech implements Keyboard{
public void makeKeyboard() {
System.out.println("制造了罗技键盘");
}
}
3.创建工厂类
public class KeyboardFactory {
//根据传进的类型进行创建不同类型的实例
public Keyboard makeKeyBoard(String type) {
if ("Razer".equals(type)) {
return new Razer();
}
if ("Logitech".equals(type)) {
return new Logitech();
}
return null;
}
}
4.测试
public class TestDemo {
public static void main(String[] args) {
KeyboardFactory factory = new KeyboardFactory();
Keyboard keyBoard = factory.makeKeyBoard("Razer");
//存在此类型的键盘就制造
if (keyBoard != null) {
keyBoard.makeKeyboard();
}else {
System.out.println("没有此类型的键盘");
}
}
}
一个抽象产品类,可以派生出多个具体产品类
一个具体工厂类创建过个产品类
缺点:每添加一中类型的键盘,就得修改工厂类,违反闭包原则,扩展时不应修改原有类的内部代码
工厂方法模式
一个抽象产品类,可以派生出多个具体的产品类:显示器下有不同牌子的显示器
一个抽象工厂类,可以派生出多个具体的工厂类:显示器工厂类下有不同显示器的工厂类
一个工厂类只能创建一个具体的产品类实例:每个显示器工厂类只能创建自己牌子的显示器
抽象工厂模式
多个抽象产品类,每个产品类可以派生出多个具体的产品类
一个抽象工厂类,可以派生出多个具体的工厂类
每个具体的工厂类可以创建出多个具体的产品,就是创建一个产品线下的多个产品
总结:
工厂方法模式和抽象工厂模式对比
工厂模式是一种极端情况下的抽象工厂模式,可以将抽象工厂模式看做是工厂模式的扩展和升级
工厂模式用来创建一个产品的等级结构,抽象工厂模式是创建多个产品的等级结构
工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的优点:
系统可以在不修改具体工厂角色的情况下引进新产品
客户端不必关心对象如何创建,明确了职责
更好的理解面向对象的原则,面向接口编程,二不是面向实现编程
转载于:https://my.oschina.net/wxdl/blog/703486