二十三种设计模式之工厂模式
程序员文章站
2022-06-19 15:13:01
工厂模式1. 简单工厂模式简单工厂模式就是非常简单的将创建一个对象的动作给工厂实体类package ink.yql.factory;// 实体类public class Phone { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; }...
工厂模式
1. 简单工厂模式
简单工厂模式就是非常简单的将创建一个对象的动作给工厂
实体类
package ink.yql.factory; // 实体类 public class Phone { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "Phone{" + "name='" + name + '\'' + '}'; } public Phone() { } }
工厂
package ink.yql.factory; // 简单工厂类 public class PhoneFactory { // 简单工厂类创建对象的方法 public static Phone newInstance(){ Phone phone = new Phone(); phone.setName("xxx"); return phone; } }
测试
package ink.yql.factory; public class Test01 { public static void main(String[] args) { // 在需要这个对象的时候由工厂给你创建 Phone phone = PhoneFactory.newInstance(); } }
2. 工厂方法模式
将简单工厂模式再次封装,它可以创建一个类型下所有的具体类(实现类)
一个类型(一个接口)
package ink.yql.factory02; // 一类物品 public interface Phone { void name(); }
一种具体的物品
package ink.yql.factory02; // 一个具体的物品 public class FlipPhone implements Phone{ public void name(){ System.out.println("我是一个翻盖手机"); } }
package ink.yql.factory02; // 一个具体的物品 public class TouchScreenPhone implements Phone{ public void name(){ System.out.println("我是一个触屏手机"); } }
工厂接口
package ink.yql.factory02; // 一类物品的工厂 public interface PhoneFactory { // 创建这一类物品的方法 Phone newInstance(); }
实现工厂(具体物品的工厂)
package ink.yql.factory02; // 具体物品的工厂 public class FlipPhoneFactory implements PhoneFactory{ // 创建一个具体的物品 @Override public Phone newInstance() { FlipPhone flipPhone = new FlipPhone(); flipPhone.name(); return flipPhone; } }
package ink.yql.factory02; // 具体物品的工厂 public class TouchScreenPhoneFactory implements PhoneFactory { @Override // 创建一个具体的物品 public Phone newInstance() { TouchScreenPhone touchScreenPhone = new TouchScreenPhone(); touchScreenPhone.name(); return touchScreenPhone ; } }
测试
package ink.yql.factory02; public class Test01 { public static void main(String[] args) { // 需要一个具体的物品就由对应物品工厂来创建 PhoneFactory factory = new TouchScreenPhoneFactory(); Phone phone = factory.newInstance(); factory = new FlipPhoneFactory(); Phone phone1 = factory.newInstance(); } }
3. 抽象工厂模式(单独是一个设计模式)
抽象工厂模式就是将一类工厂标准化,要有一个工厂就必须符合这一类工厂标准
实体类(一类物品)
package ink.yql.factory03; public interface Computer { void name(); }
package ink.yql.factory03; public interface Phone { void name(); }
具体的物品
package ink.yql.factory03; public class HuaweiComputer implements Computer{ @Override public void name() { System.out.println("我华为的电脑"); } }
package ink.yql.factory03; public class HuaweiPhone implements Phone{ @Override public void name() { System.out.println("我华为的手机"); } }
package ink.yql.factory03; public class XiaomiComputer implements Computer{ @Override public void name() { System.out.println("我是小米电脑"); } }
package ink.yql.factory03; public class XiaomiPhone implements Phone{ @Override public void name() { System.out.println("我是小米手机"); } }
工厂的标准(规范)
package ink.yql.factory03; // 这个工厂是规范 public interface Factory { // 制造手机的方法 Phone newPhone(); // 制造电脑的方法 Computer newComputer(); }
具体的工厂
package ink.yql.factory03; // 一个具体的工厂 要符合工厂的规范 public class HuaweiFactory implements Factory { @Override public Phone newPhone() { return new HuaweiPhone(); } @Override public Computer newComputer() { return new HuaweiComputer(); } }
package ink.yql.factory03; // 一个具体的工厂 要符合工厂的规范 public class XiaomiFactory implements Factory { @Override public Phone newPhone() { return new XiaomiPhone(); } @Override public Computer newComputer() { return new XiaomiComputer(); } }
测试
package ink.yql.factory03; public class Test03 { public static void main(String[] args) { // 要哪个类型的物品就由对应的工厂创建 Factory factory = new XiaomiFactory(); Phone phone = factory.newPhone(); phone.name(); Computer computer = factory.newComputer(); computer.name(); Factory factory01 = new HuaweiFactory(); Phone phone01 = factory01.newPhone(); phone01.name(); Computer computer01 = factory01.newComputer(); computer01.name(); } }
本文地址:https://blog.csdn.net/weixin_46503529/article/details/108248558
上一篇: 日志12月30日
下一篇: 第七讲:顺序执行和while循环