首页 > 编程知识 正文

设计模式工厂模式生产牛和马,设计模式工厂模式类

时间:2023-05-06 04:35:41 阅读:245107 作者:3724

本专栏将从基础开始循序渐进由浅入深讲解常见的设计模式希望大家都能够从中有所收获也请大家多多支持。 专栏地址:设计模式实战 所有代码地址:代码地址 如果文章知识点有错误的地方请指正大家一起学习一起进步。

文章目录 1 工厂模式1.1 简单工厂1.2 抽象工厂1.3 抽象工厂产品族

1 工厂模式 1.1 简单工厂 public class Client { public interface IProduct{ void doSomething(); } //静态类只能访问类内部的静态成员 //非静态类可访问类内所有成员 static class ProductA implements IProduct{ public void doSomething(){ System.out.println(I am Produuct A); } } static class ProductB implements IProduct{ public void doSomething(){ System.out.println(I am Produuct B); } } static class ProductC implements IProduct{ public void doSomething(){ System.out.println(I am Produuct C); } } enum ProductType{ PRODUCT_A, PRODUCT_B, PRODUCT_C } static class SimpleFactory{ public static IProduct makeProduct(ProductType type){ switch (type){ case PRODUCT_A: return new ProductA(); case PRODUCT_B: return new ProductB(); case PRODUCT_C: return new ProductC(); } return null; } } public static void main(String[] args) { System.out.println(ProductType.PRODUCT_A); IProduct product new SimpleFactory().makeProduct(ProductType.PRODUCT_A); product.doSomething(); }} 1.2 抽象工厂

在抽象中不再由单一的工厂类生产产品而是由工厂类的实现类创建具体产品。因此当增加一个产品时只需增加一个相应的工厂类的子类实现生产这种产品便可以解决简单工厂生产太多产品导致其内部代码臃肿(switch … case分支过多)的问题也符合开闭原则。

UML类图

package design;public class Client { public static void main(String[] args) { IFactory factory new FactoryA(); factory.makeProduct().doSomething(); } private interface IProduct{ void doSomething(); } private static class ProductA implements IProduct{ public void doSomething() { System.out.println(I am Product A); } } private static class ProductB implements IProduct{ public void doSomething() { System.out.println(I am Product B); } } private static class ProductC implements IProduct{ public void doSomething() { System.out.println(I am Product C); } } private interface IFactory{ IProduct makeProduct(); } private static class FactoryA implements IFactory{ public IProduct makeProduct() { return new ProductA(); } } private static class FactoryB implements IFactory{ public IProduct makeProduct() { return new ProductB(); } } private static class FactoryC implements IFactory{ public IProduct makeProduct() { return new ProductC(); } }} 1.3 抽象工厂产品族

1.2中的抽象工厂只能产生一个对象当需要产生一类对象时需要提供一个产品类的库所有产品以同样的接口出现从而使客户端不依赖具体实现。

package design;public class Client { public static void main(String[] args) { IFactory factory new FamilyA(); factory.makeProductA().doA(); factory.makeProductB().doB(); } private interface IProductA{ void doA(); } private interface IProductB{ void doB(); } private static class ProductAInFamilyA implements IProductA{ public void doA() { System.out.println(The productA is part of FamilyA); } } private static class ProductBInFamilyA implements IProductB{ public void doB() { System.out.println(The productB is part of FamilyA); } } private static class ProductAInFamilyB implements IProductA{ public void doA() { System.out.println(The productA is part of FamilyB); } } private static class ProductBInFamilyB implements IProductB{ public void doB() { System.out.println(The productB is part of FamilyB); } } private interface IFactory{ IProductA makeProductA(); IProductB makeProductB(); } private static class FamilyA implements IFactory{ public IProductA makeProductA() { return new ProductAInFamilyA(); } public IProductB makeProductB() { return new ProductBInFamilyA(); } } private static class FamilyB implements IFactory{ public IProductA makeProductA() { return new ProductAInFamilyB(); } public IProductB makeProductB() { return new ProductBInFamilyB(); } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。