当前位置: 首页 > news >正文

网站制作平台公司陕西煤业化工建设集团有限公司网站

网站制作平台公司,陕西煤业化工建设集团有限公司网站,wordpress 课程管理系统,seo为什么不景气了一、介绍 工厂方法模式#xff08;Factory Pattern#xff09;#xff0c;是创建型设计模式之一。工厂方法模式是一种结构简单的模式#xff0c;其在我们平时开发中应用很广泛#xff0c;也许你并不知道#xff0c;但是你已经使用了无数次该模式了#xff0c;如Android…一、介绍 工厂方法模式Factory Pattern是创建型设计模式之一。工厂方法模式是一种结构简单的模式其在我们平时开发中应用很广泛也许你并不知道但是你已经使用了无数次该模式了如Android中的Activity里的各个生命周期方法以onCreate方法为例它就可以看作是一个工厂方法我们在其中可以构造我们的View并通过setContentView返回给framework处理等相关内容我们下面再讲先看看工厂方法模式定义。 二、定义 定义一个用于创建对象的接口让子类决定实例化哪个类。 三、使用场景 在任何需要生成复杂对象的地方都可以使用工厂方法模式。复杂对象适合使用工厂模式用new就可以完成创建的对象无需使用工厂模式。 四、模式的简单实现 抽象产品类 public abstract class Product {/*** 产品类的抽象方法* 由具体的产品类去实现* */public abstract void method(); } 具体产品类A public class ConcreteProductA extends Product {Overridepublic void method() {System.out.println(我是具体的产品A);} } 具体产品类B public class ConcreteProductB extends Product {Overridepublic void method() {System.out.println(我是具体的产品B);} } 抽象工厂类 public abstract class Factory {/*** 抽象工厂方法* 具体由子类实现* * return 具体的产品对象* */public abstract Product createProduct(); } 具体工厂类 public class ConcreteFactory extends Factory {/*** 具体工厂类* */Overridepublic Product createProduct() {return new ConcreteProductA();} } 客户类 public class Client {public static void main(String[] args) {Factory factory new ConcreteFactory();Product product factory.createProduct();product.method();} } 结果 我是具体的产品A 这里的几个角色都很简单主要分为四大模块一是抽象工厂其为工厂方法模式的核心二是具体工厂其实现了具体的业务逻辑三是抽象产品是工厂方法模式所创建的产品的父类四是具体产品为实现抽象产品的某个具体产品的对象。 上述的代码中我们在Client类中构造了一个工厂对象并通过其生产了一个产品对象这里我们得到的产品对象是ConcreteProductA的实例如果想得到ConcreteProductB的实例更改ConcreteFactory中的逻辑即可 public class ConcreteFactory extends Factory {/*** 具体工厂类* */Overridepublic Product createProduct() {//return new ConcreteProductA();return new ConcreteProductB();} } 这种方式比较常见需要哪一个产品就生产哪一个有时候也可以利用反射的方式更简洁的来生产具体产品对象此时需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类 public abstract class Factory {/*** 抽象工厂方法* 具体由子类实现* * param clz 产品对象类类型* * return 具体的产品对象* */public abstract T extends Product T createProduct(ClassT clz); } 对于具体的工厂类则通过反射获取类的示例即可 public class ConcreteFactory extends Factory {/*** 具体工厂类* */SuppressWarnings(unchecked)Overridepublic T extends Product T createProduct(ClassT clz) {Product product null;try {product (Product) Class.forName(clz.getName()).newInstance();} catch (Exception e) {e.printStackTrace();}return (T)product;} } 最后在看看Client中的实现 public class Client {public static void main(String[] args) {Factory factory new ConcreteFactory();Product product factory.createProduct(ConcreteProductB.class);product.method();} } 需要哪一个类的对象就传入哪一个类的类型即可这种方法比较简洁、动态如果你不喜欢这种方式也可以尝试为每一个产品都定义一个具体的工厂各司其职。 public class ConcreteFactoryA extends Factory {/*** 具体工厂类**/Overridepublic Product createProduct() {return new ConcreteProductA();} }public class ConcreteFactoryB extends Factory {/*** 具体工厂类**/Overridepublic Product createProduct() {return new ConcreteProductB();} }public class Client {public static void main(String[] args) {Factory factoryA new ConcreteFactoryA();Product productA factoryA.createProduct();productA.method();Factory factoryB new ConcreteFactoryB();Product productB factoryB.createProduct();productB.method();} } 像这样拥有多个工厂的方式我们称为多工厂方法模式同样的回到我们最初的那个工厂方法模式当我们的工厂只有一个的时候我们还是为工厂提供了一个抽象类那么我们是否可以将其简化掉呢如果确定你的工厂类只有一个那么简化掉抽象类是肯定没问题的我们只需要将对应的工厂方法改为静态方法即可 public class Factory {/*** 具体工厂类**/Overridepublic static Product createProduct() {return new ConcreteProductA();} } 像这样的方式又称为简单工厂模式或静态工厂模式它是工厂方法模式的一个弱化版本。 其实到这里大家应该可以发现工厂方法模式是完全符合设计原则的其降低了对象之间的耦合度而且工厂方法模式依赖于抽象的架构其将实例化的任务交由子类去完成有非常好的扩展性。 五、Android源码中的工厂方法模式 Activity的各种生命周期ArrayList和HashSet 六、总结 优点 工厂方法模式完全符合设计原则降低了对象之间的耦合。高层模块只需要知道产品的抽象类其他的实现都不需要关心。 良好的封装性代码结构清晰。扩展性好。 缺点 每次我们为工厂方法模式添加新的产品时就要编写一个新的产品类。同时还要引入抽象层这必然会导致类结构的复杂化所以在某些情况比较简单时是否要使用工厂模式需要设计者权衡利弊了。
http://www.pierceye.com/news/574236/

相关文章:

  • 做网站的公司盐城网站排名优化培训
  • 营销型网站搭建公司3d云打印网站开发
  • 网站建设首选沈阳高端网站建设搬家公司收费标准
  • 网站建设需要多少钱知乎企业管理软件行业未来的发展
  • 网站建设与管理 自考百度网站地图生成
  • 在线优化网站源码站
  • 中企动力做网站一次性付款零基础学室内设计
  • 企炬网站wordpress会员付费插件
  • 在哪里购买虚拟空间建设网站网页设计培训机构培训费
  • 网站建设的色彩搭配做网站赚钱吗 怎么赚
  • 门头沟富阳网站建设西安企业电话
  • 电子商务网站建设概括湘潭专业seo优化推荐
  • 炫彩发光字制作免费网站动漫制作就业方向
  • 阿里巴巴可以做网站吗网站的可用性
  • 云虚拟主机怎么做2个网站装饰工程施工
  • 网站备案查询流程wordpress手机页面没有注册
  • 辽宁城乡建设集团官方网站精品课程网站建设
  • 威海 网站建设个人做网站可以盈利么
  • 机关网站源码网站建设 备案什么意思
  • 做理财的网站有哪些怎么弄数据库备份做网站
  • 网站不接入备案易企互联网站建设
  • 那种网站打不开北京网站建设找华网天下
  • 网站建设seo优化浙江网站名称怎么收录
  • 天津网站制作工具想自己做网站 有免费的吗
  • 宝塔织梦网站建设求网站备案照片
  • 聊城住房和城乡建设厅网站研发项目管理软件
  • 国投集团网站开发杭州网站界面设计
  • 做关于什么的网站莆田网站建设解决方案
  • 湖南长沙做网站那些网站可以做反链
  • 成都金牛网站建设公司高端网站配色