申请书范文网,分享全网优秀范文,学习好帮手!
申请书范文网 > 设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂

设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂

时间:2020-02-21 08:32:02

相关推荐

设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂

简单工厂

简单工厂模式也成静态工厂模式,但此模式不符合开闭原则,但仍然很常用

适用范围:工厂类需要创建的对象种类比较少,客户端只需要知道传入工厂类的参数,对于如何创建对象(逻辑)不关心

上段代码:

public abstract class Bread {public abstract void getBread();}public class Brioche extends Bread {@Overridepublic void getBread() {System.out.println("奶油面包");}}public class Sandwich extends Bread {@Overridepublic void getBread() {System.out.println("三明治");}}public class Doughnut extends Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}}public class BreadFactory {public static Bread createBread(Class c){try {Bread b = (Bread)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}

工厂方法

工厂方法相比简单工厂的差别是工厂方法并不会自己去创建对象,它将创建方法交给子工厂实现,这样符合开闭原则,对于新增的类型只需扩展无需修改

代码如下:

public abstract class Bread {public abstract void getBread();}public class Brioche extends Bread {@Overridepublic void getBread() {System.out.println("奶油面包");}}public class Sandwich extends Bread {@Overridepublic void getBread() {System.out.println("三明治");}}public class Doughnut extends Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}}public abstract class AbstractBreadFactory{public abstract Bread createBread();}public class BriocheFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Brioche();}}public class SandwichFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Sandwich();}}public class DoughnutFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Doughnut();}}

抽象工厂

用于产品族的构建。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

public interface Bread{public void getBread();public void getBreadSize();}public abstract class Doughnut implements Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}}public class BigDoughnut extends Doughnut{@Overridepublic void getBreadSize() {System.out.println("大号甜甜圈");}}public interface BreadFactory{public Bread createBrioche();public Bread createSandwich();public Bread createDoughnut();}public class BigFactory implements BreadFactory{@Overridepublic Bread createBrioche() {return new BigBrioche();}@Overridepublic Bread createSandwich() {return new BigSandwich();}@Overridepublic Bread createDoughnut() {return new BigDoughnut();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。