一、工厂方法模式
简单工厂模式的缺陷就是类的创建太过于依赖工厂,一旦需要进行程序扩展,就必须修改工厂类的代码
这违背了背包原则。抽象工厂模式
而工厂方法模式针对这一问题进行了改进。
public intece Sender {public void send();}public intece producer {public Sender produce();}public class MailFactory implements producer{public Sender produce() {return new Mail();}}public class Mail implements Sender{public void send() {System.out.println("mail is sending ");}}//测试类public class FactoryPatten {public static void main(String[] args) {MailFactory mailFactory = new MailFactory();Sender sender = mailFactory.produce();sender.send();}}
工厂方法模式的好处就是,一旦进行功能扩展,只需要增加一个类实现Sender接口,再创建一个工厂类实现producer接口,即可
对于原有的工厂进行保留,这样就保证了再不违背闭包原则下,进而提高了拓展性。
二、抽象工厂模式
工厂方法模式和抽象工厂模式不好分清楚
工厂方法模式:
一个抽象产品类,可以派生出很多具体产品类
一个抽象工厂类,可以派生出很多具体工厂类
每一个具体工厂类只能创建一个具体产品的实例
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。
package day03;intece ProduceComputer{}//抽象电脑产品intece ProduceHouse{}//抽象家用,以下只用抽象电脑产品举例intece Factory{}//抽象工厂//A工厂的鼠标class MouseA implements ProduceComputer{MouseA(){System.out.println("MouseA has created");}public void doSomething(){System.out.println("MouseA is running");}}//B工厂的鼠标class MouseB implements ProduceComputer{MouseB(){System.out.println("MouseB has created");}public void doSomething(){System.out.println("MouseB is running");}}//A工厂的键盘class keyBoardA implements ProduceComputer{keyBoardA(){System.out.println("keyBoardA has created");}public void doSomething(){System.out.println("keyBoardA is running");}}//B工厂的键盘class keyBoardB implements ProduceComputer{keyBoardB(){System.out.println("keyBoardB has created");}public void doSomething(){System.out.println("keyBoardB is running");}}//A工厂,生产A工厂的产品class FactoryA implements Factory{public MouseA produceMouseA(){return new MouseA();}public keyBoardA produceKeyBoardA(){return new keyBoardA();}}//B工厂,生产B工厂的产品class FactoryB implements Factory{public MouseB produceMouseB(){return new MouseB();}public keyBoardB produceKeyBoardB(){return new keyBoardB();}}//测试类public class AbstractFactory {public static void main(String[] args) {MouseA ma = new FactoryA().produceMouseA();ma.doSomething();keyBoardA ka = new FactoryA().produceKeyBoardA();ka.doSomething();MouseB mb = new FactoryB().produceMouseB();mb.doSomething();keyBoardB kb = new FactoryB().produceKeyBoardB();kb.doSomething();}}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-31482-1.html
把自己的家慢慢败掉
心里没底怕你动真格
我们不只会用嘴巴说话