主网站怎么做熊掌号优化,优设设计师网站,家装设计方案ppt案例,小型项目外包网站文章目录 定义简单工厂模式案例 | 代码Phone顶层接口设计Meizu品牌类Xiaomi品牌类PhoneFactory工厂类Customer 消费者类 工厂方法模式案例 | 代码PhoneFactory工厂类 Java高级特性---工厂模式与反射的高阶玩法方案#xff1a;反射工厂模式 总结 其实工厂模式就是用一个代理类帮… 文章目录 定义简单工厂模式案例 | 代码Phone顶层接口设计Meizu品牌类Xiaomi品牌类PhoneFactory工厂类Customer 消费者类 工厂方法模式案例 | 代码PhoneFactory工厂类 Java高级特性---工厂模式与反射的高阶玩法方案反射工厂模式 总结 其实工厂模式就是用一个代理类帮你创建管理对象你就不用在代码层面去不断new对象的使用了。 创建对象和调用对象两者之间会解耦
定义 工厂模式有三种 简单工厂模式工厂方法模式抽象方法模式 简单工厂模式
简单工厂模式也叫静态工厂模式。 举个例子你要去买一台手机你不用关心手机是怎么生产出来的里面的零件具体又是怎么制造的这些通通都交给工厂去处理你尽管去买手机就好了。 案例 | 代码
Phone顶层接口设计
/*** author linghu* date 2024/7/5 11:08*/
public interface Phone {void getBrand();
}Meizu品牌类
/*** author linghu* date 2024/7/5 11:09*/
public class Meizu implements Phone{Overridepublic void getBrand() {System.out.println(魅族);}
}Xiaomi品牌类
/*** author linghu* date 2024/7/5 12:35*/
public class Xiaomi implements Phone{Overridepublic void getBrand() {System.out.println(小米);}
}PhoneFactory工厂类
这个是简单工厂模式又叫静态工厂所以方法自然是静态的而且这个工厂类负责帮我们创建对象并且返回对象
在这里我们可以先用硬编码的方式
/*** author linghu* date 2024/7/5 12:35*/
public class PhoneFactory {public static Phone getPhone(String phone){if (小米.equals(phone)){return new Xiaomi();} else if (魅族.equals(phone)) {return new Meizu();}else {return null;}}
}Customer 消费者类
这个类就类似一个客户端的作用把。
/*** author linghu* date 2024/7/5 12:38*/
public class Customer {public static void main(String[] args) {PhoneFactory.getPhone(小米).getBrand();PhoneFactory.getPhone(魅族).getBrand();}
}工厂方法模式
工厂方法模式就是在上面简单工厂模式的基础上做了一些修改具体的做法就是为每种不同品牌的手机都创建一个工厂独立生产。 案例 | 代码
如上其他代码都不变变化的部分是工厂那部分
PhoneFactory工厂类
首先修改一下PhoneFactory工厂类将
/*** author linghu* date 2024/7/5 12:35*/
public class PhoneFactory {public static Phone getPhone(String phone){if (小米.equals(phone)){return new Xiaomi();} else if (魅族.equals(phone)) {return new Meizu();}else {return null;}}
}修改为
/*** author linghu* date 2024/7/5 12:35*/
public interface PhoneFactory {Phone getPhone();
}新增的两个工厂类
/*** author linghu* date 2024/7/5 14:09*/
public class MeizuFactory implements PhoneFactory{Overridepublic Phone getPhone() {return new Meizu();}
}
/*** author linghu* date 2024/7/5 14:08*/
public class XiaomiFactory implements PhoneFactory{Overridepublic Phone getPhone() {return new Xiaomi();}
}Customer 消费者类
/*** author linghu* date 2024/7/5 12:38*/
public class Customer {public static void main(String[] args) {
// PhoneFactory.getPhone(小米).getBrand();
// PhoneFactory.getPhone(魅族).getBrand();Phone xiaominew XiaomiFactory().getPhone();Phone meizunew MeizuFactory().getPhone();xiaomi.getBrand();meizu.getBrand();}
}Java高级特性—工厂模式与反射的高阶玩法
我们先回顾一下上面的工厂模式用法列举一下会发现
简单工厂模式的局限性在于如果我们扩充手机的品牌就会违反 开闭原则。工厂方法模式的局限性在于我们扩充手机品牌需要不断new更多对象这是耦合的最大元凶
方案反射工厂模式
PhoneFactory工厂类
/*** author linghu* date 2024/7/5 12:35*/
public class PhoneFactory {public static Phone getInstance(String origin) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class? cls Class.forName(com.linghu.factory. origin);Phone brand(Phone)cls.newInstance();return brand;}
}Customer 消费者类
这个时候我们无需再new更多对象了也不用写死了
/*** author linghu* date 2024/7/5 12:38*/
public class Customer {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
// PhoneFactory.getPhone(小米).getBrand();
// PhoneFactory.getPhone(魅族).getBrand();
// Phone xiaominew XiaomiFactory().getPhone();
// Phone meizunew MeizuFactory().getPhone();
// xiaomi.getBrand();
// meizu.getBrand();PhoneFactory.getInstance(Xiaomi).getBrand();}
}输入类名以后反射创建对象再通过工厂返回相关对象
总结 第一个静态工厂模式在实际去开发中会发现比较常用尽管上面讲了不符合面向对象OOP原则。 第二个工厂方法模式不修改工厂类的前提也就是说不修改已有类实现对扩展是开发对修改关闭。