《Head First 设计模式》学习中分类简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 介绍简单工厂模式: 简单工厂其实并不是一个设计模式,反而比较像是一种编程习惯 ...
《Head First 设计模式》学习中
分类
- 简单工厂模式(Simple Factory)
- 工厂方法模式(Factory Method)
- 抽象工厂模式(Abstract Factory)
介绍
简单工厂其实并不是一个设计模式,反而比较像是一种编程习惯,但是由于经常被使用,所以才被称为简单工厂模式,你可以把它看为工厂模式的一种特例,但是不能因为它不是一个真正的设计模式,就忽略它。
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
简单工厂类图
简单工厂实例
产品类
package com.Observer.model;public class food { public food(){ } }
具体产品类
package com.Observer.model;public class ChickenPot extends food { public ChickenPot(){ System.out.println("黄焖鸡"); } }
package com.Observer.model;public class Noodles extends food { public Noodles(){ System.out.println("砂锅方便面"); } }
工厂类
package com.Observer.model;public class SimpleFoodFactory { public food create(String type){ if(type.equals("黄焖鸡")){ return new ChickenPot(); }else if(type.equals("砂锅方便面")){ return new Noodles(); } return null; }}
测试类
package com.Observer.model;public class Test { public static void main(String[] args) { SimpleFoodFactory factory = new SimpleFoodFactory(); food food = factory.create("砂锅方便面"); food food1 = factory.create("黄焖鸡"); }}
输出结果:
砂锅方便面黄焖鸡
简单工厂的优势:
如果以后要实现改变的时候,只需要修改工厂类就可以
工厂模式实例:
利用简单工厂开的饭店太红火了,引来了两个代理商,因为我们的代码处理方便使用,所以他们想使用我们的代码来确保质量。这样我们就可以使用工厂模式
产品类:
package com.Observer.model;public abstract class food { public food(){ }}
具体产品类
package com.Observer.model;public class ChickenPot extends food { public ChickenPot(String name){ System.out.println(name + " :黄焖鸡"); } }
package com.Observer.model;public class Noodles extends food { public Noodles(String name){ System.out.println(name + " :砂锅方便面"); } }
工厂接口
package com.Observer.model;public interface factoryFood { food create(String type);}
工厂实现类
package com.Observer.model;/** * 通州店 * @author Administrator * */public class TongFood implements factoryFood { @Override public food create(String type) { if (type.equals("黄焖鸡")) { return new ChickenPot("通州分店"); } else if (type.equals("砂锅方便面")) { return new Noodles("通州分店"); } return null; }}
package com.Observer.model;/** * 昌平店 * @author Administrator * */public class ChangFood implements factoryFood { @Override public food create(String type) { if (type.equals("黄焖鸡")) { return new ChickenPot("昌平分店"); } else if (type.equals("砂锅方便面")) { return new Noodles("昌平分店"); } return null; }}
测试类
package com.Observer.model;public class Test { public static void main(String[] args) { factoryFood factory = new TongFood(); factory.create("黄焖鸡"); factoryFood factory1 = new ChangFood(); factory1.create("砂锅方便面"); }}
输出结果:
通州分店 :黄焖鸡昌平分店 :砂锅方便面
工厂方法模式:
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类
参考:  
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:java 简单工厂 工厂模式
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。