营销策略4p分析怎么写,网站建设优化工资高不,网站搭建与推广,黑龙江网站建设开发工厂模式概念#xff1a; 实例化对象#xff0c;用工厂方法代替new操作工厂模式包括工厂方法模式和抽象工厂模式抽象工厂模式是工厂方法模式的扩展工厂模式的意图#xff1a; 定义一个接口创建对象#xff0c;但是让子类决定哪些类需要被实例化。工厂方法把实例化的工作推迟…工厂模式概念 实例化对象用工厂方法代替new操作工厂模式包括工厂方法模式和抽象工厂模式抽象工厂模式是工厂方法模式的扩展工厂模式的意图 定义一个接口创建对象但是让子类决定哪些类需要被实例化。工厂方法把实例化的工作推迟到子类去实现。什么情况下适合工厂模式 有一组类似的对象需要创建。在编码时候不能预见需要创建哪种类的实例。系统需要考虑扩展性不应依赖于产品类实例如何被创建组合和表达的细节。工厂模式的动机 项目中的现状 软件系统中经常面临对象的创建工作由于需求的变化这个对象可能也随之发生变化但他却拥有比较稳定的接口。 为此我们需要提供一种封装机制来隔离出这个易变对象的变化从而保持系统中其他依赖该对象的对象不随之需求变化而变化。 基于项目现状将代码进行如下设计 1尽量松耦合一个对象的依赖对象的变化与本身无关。 2具体产品与客户端剥离责任分割。 项目 说明 实现代码 先定义一个接口发型接口 package com.Factory;
/** 发型接口* */
public interface HairInterface {//实现了发型public void draw();
} 定义两个实现类 package com.Factory;public class LeftHair implements HairInterface {/** 画了一个左偏分发型* */Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(----------实现了左偏发型------------);}
} 和 package com.Factory;public class RightHair implements HairInterface {/** 画了一个右偏分发型* */Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println(----------实现了右偏分发型------------);}
} 测试不使用工厂的实现方式 package com.Factory;
/** 模拟客户端实现* */
public class SunnyTest {public static void main(String[] args) {//不用工厂的方式实现HairInterface leftnew LeftHair();left.draw();}
} 这种方式很麻烦。 可以通过工厂模式解决 工厂类分别用普通的工厂类和通过反射实现的工厂类实现。 package com.Factory;
/** 发型工厂* */
public class HairFactory {//普通的工厂方式public HairInterface getHair(String key){if(left.equals(key)){return new LeftHair();}else if(Right.equals(key)){return new RightHair();}return null;}/** 通过反射实现工厂* 根据类的名称来生产对象* */public HairInterface getHairByClass(String className){try {HairInterface hair(HairInterface)Class.forName(className).newInstance();return hair;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;}
} 分别用三种方式实现 package com.Factory;
/** 模拟客户端实现* */
public class SunnyTest {public static void main(String[] args) {//不用工厂的方式实现HairInterface leftnew LeftHair();left.draw();//使用普通工厂的方式HairFactory factorynew HairFactory();HairInterface left2factory.getHair(left);left2.draw();//使用反射实现的工厂HairInterface rightfactory.getHairByClass(com.Factory.RightHair);right.draw();}} ---恢复内容结束---转载于:https://www.cnblogs.com/alsf/p/8486262.html