工厂设计模式相关知识
-
设计模式----工厂设计模式工厂设计模式概念 什么是工厂设计模式 工厂设计模式,理解为用来生产对象的,Java是面向对象编程语言,Java语言中,对象都是需要创建的,对象都是通过关键字new实例化,试想,如果在程序中需要实例化10个对象,遇到需求变更,实例化的对象需要改变,那实例化对象的10处地方都需要修改;这个时候可以设计为工厂模式,如果获取对象不是直接new实例化的,而是通过工厂获取对象,那么,对象有修改的时候,只需要通过修改工厂中的对象,就可以将所有的对象修改,所有得出工厂模式的最大优点是:解耦
-
设计模式之-简单工厂设计模式我们来看一下简单工厂设计模式,在这里我就拿控制台应用做演示了,来做一个加减乘除的操作.在这个项目中我们共需要 操作类(Operaction),工厂类(factory),加法类(Add),调用(Program),调用就在Program中调用了。创建好控制台程序后我们来创建一个操作类(Operaction),代码如下public class Operaction { public int Num1 { get; set; } public int Num2 { get; set; } &
-
Android常见的模式:工厂设计模式工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 ------百毒百科new操作是实例化对象,工厂实例化对象意味着大批量,当然这里的大批量指的是好几个,一些功能类似的类,将其进行抽象,使用公共父类或借口或抽象类来提取共有特性。工厂模式分了简单工厂和抽象工厂,我们在不知不觉中会用到的也是经常用到是简单工厂:通过参数来创建不同的对象。本文内容十分简单,是工厂设计模式、Tab页面以及MD控件TabLayout结合的实现说明,即demo的说明。上代码! FragmentFactoryDemo先上图上图中是app中经常会看到的一种主页效果,这里面设计到的四个东西:宿主activity,滑动的viewpager,填充内容的fragme
-
抽象工厂设计模式学习定义: 用于提供一个不需要指定具体的类就能去创建一系列相互关联的对象的接口。UML图:参与者:这种设计模式的参与者:1、抽象工厂(AbstractFactory):声明一个创建抽象产品操作的接口2、具体工厂(ConcreteFactory):实现创建具体产品的操作方法3、抽象产品(AbstractProduct):为产品类型对象声明的接口4、产品(ConcreteFactory创建的产品对象。5、Client ):使用AbstractFactory和AbstractProduct类声明的接口示例: class Program 2 { 3 /// <summary>  
工厂设计模式相关课程
工厂设计模式相关教程
- 工厂模式 工厂模式是平时开发过程中最常见的设计模式。工厂模式解决类的实例化问题,它属于创建型模式。工厂模式也经常会和其他设计模式组合使用。试想你去麦当劳买一个汉堡。你只需要告诉收银员要一个xx汉堡。过一会就会有一个此类型的汉堡被制作出来。而你完全不需要知道这个汉堡是怎么被制作出来的。这个例子中你就是客户端代码,麦当劳就是工厂,负责生产汉堡。汉堡是接口,而具体的某一种汉堡,比如说香辣鸡腿堡,就是实现了汉堡接口的类。我们继续通过另外一个例子,深入理解工厂模式。现在我们给某款音乐软件开发一个推荐功能。需求是能够根据用户选择的音乐风格,推荐不同风格的歌曲清单。那么你打算怎么实现呢?
- 抽象工厂模式 抽象工厂模式用来解决产品族的实例化问题。比如说现在有个家居设计软件,通过软件模拟房间,摆放各种虚拟的家具,看效果如何。我们可以放入电视柜、茶几、餐桌、床等等。这一系列的家具就叫做产品族。产品族面临的问题是,当一个产品族切换到另外一个产品族时,如何让代码的修改最小。也就是说如何做到开闭原则。想把设计好的方案从简约现代切换到欧式风格家具,怎么才能做到修改最小?如果采用简单工厂,那么每种产品都对应一个工厂,工厂负责产出不同风格的产品。设计方案中用到 n 种产品就要修改 n 处代码。这显然不是最佳的方法。此时,我们需要抽象工厂模式来解决这个问题。抽象工厂模式中,每个工厂的实现负责生产自己产品族的产品。示意图如下:
- 3. 策略模式与工厂模式结合使用 针对第一个缺点。我们可以通过策略模式与工厂模式结合使用来改进。通过进一步封装,消除客户端代码的条件选择。我们修改一下StrategyContext类,代码如下:public class StrategyContext { private TravelStrategy strategy; public StrategyContext(String travelWay) { if ("selfDriving".equals(travelWay)) { strategy = new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { strategy = new BicycleStrategy(); } else { strategy = new PublicTransportStrategy(); } } public int calculateMinCost(){ return strategy.calculateMinCost(); }}可以看到我们初始化的逻辑和工厂的逻辑很相似。这样条件判断就提炼到 Context 类中了。而客户端代码将会简洁很多,只需要在初始化 StrategyContext 时,传入相应的出行方式即可。代码如下:public class TravelService { private StrategyContext strategyContext; public int calculateMinCost(String travelWay){ strategyContext = new StrategyContext(travelWay); return strategyContext.calculateMinCost(); }}改进后,客户端代码现在已经完全不知道策略对象的存在了。条件判断也被消除了。其实很多时候我们都是通过搭配不同设计模式来达到我们的设计目标的。策略+工厂模式类图如下:
- 1.1 工厂模式实现电子地图 首先我们需要一个策略接口,不同策略实现该接口。再搭配一个策略工厂。客户端代码只需要根据用户的出行方式,让工厂返回具体实现即可,由具体的实现来提供算法计算。以工厂模式实现的电子地图代码如下。TravelStrategy接口代码:public interface TravelStrategy { int calculateMinCost();}TravelStrategy接口的实现代码:public class SelfDrivingStrategy implements TravelStrategy { @Override public int calculateMinCost() { return 30; }}TravelStrategyFactory代码:public class TravelStrategyFactory { public TravelStrategy createTravelStrategy(String travelWay) { if ("selfDriving".equals(travelWay)) { return new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { return new BicycleStrategy(); } else { return new PublicTransportStrategy(); } }}TravelService对外提供计算方法,通过工厂生成所需要的 strategy。代码如下:public class TravelService { private TravelStrategyFactory travelStrategyFactory = new TravelStrategyFactory(); public int calculateMinCost(String travelWay) { TravelStrategy travelStrategy = travelStrategyFactory.createTravelStrategy(travelWay); return travelStrategy.calculateMinCost(); }}代码结构和我们上一节讲解的音乐推荐器几乎一模一样。看似也很好地解决了我们的设计问题。接下来我们看看如何用策略模式解决这个问题,然后我们再对两种模式做对比。
- 3. 单例设计模式封装会话工厂的创建 测试环境是一个演示、求证过程,测试一次创建一个 SessionFactory 对象并没有什么不妥。生产环境则不同,代码结构上设计如果有缺陷,或者不遵循对象本身的特性需求。产品上线后,可能会因为产品的设计缺陷给客户造成某种程度上的损失。报酬拿不到事小,丢失市场信任事大。使用 HibernateSessionFactory 对象封装 SessionFactory 的创建:public class HibernateSessionFactory { private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static org.hibernate.SessionFactory sessionFactory; private static Configuration configuration = new Configuration(); private static ServiceRegistry serviceRegistry; //加载类时创建会话工厂对象 static { try { configuration.configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(*configuration*.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { session = (sessionFactory != null) ? sessionFactory.openSession():null; threadLocal.set(session); } return session; } public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } } HibernateSessionFactory 类内有很多代码值得细细品味,本节课你只需要关注单例设计模式实现要素:构造方法私有化,创建对象的能力由内部决定,阻止外部非法任意创建; private HibernateSessionFactory() { }SessionFactory 在类的静态代码块内创建; private static org.hibernate.SessionFactory sessionFactory; //创建会话工厂,只会执行一次,也就只有一个对象 static { //省略…… }提供公开方法允许外部调用; public static org.hibernate.SessionFactory getSessionFactory() { //直接返回内部创建的会话工厂对象 return sessionFactory; }无论外部调用 getSessionFactory()方法多少次,最后创建的都只会有一个 SessionFactory 对象。HibernateSessionFactory 类其它精华代码留到下一节课程。
- 2.1 <strong>概括会话工厂(SessionFactory)的功能</strong> 为开发者屏蔽创建会话对象(session)时的一系列繁琐事宜,让开发者简单、直接获取 Session 对象,快速迭代自己的代码功能;可根据开发者在主配置文件中的配置需求,提供高级辅助功能(如数据库连接池……);会话工厂可缓存生成的 SQL 语句和 Hibernate 在运行时使用的映射元数据。SessionFactory 类的设计顾名思议使用到工厂设计模式。经常会在一些框架程序中看到工厂设计模式,工厂设计模式的知名度如此之高,是由它自身的优势决定的:工厂对象替开发者完成创建对象的细枝末节,让开发者只需专注于如何运用对象;工厂对象内部可提供创建对象的优化方案,避免因开发者随意创建对象所带来的内存消耗。古人打猎,需要用一周时间打磨工具,用一天时间捕捉猎物。现代人打猎前,可以去商店买一把猎枪,然后尽情享受打猎过程(保护野生动物,禁止打猎!)。工厂设计模式对开发者说:享受开发吧!少年……SessionFactory 从功能来讲似乎简单明了,创建 Session(其实这把猎枪不简单)。
工厂设计模式相关搜索
-
g area
gamma函数
gcc 下载
generic
genymotion
gesture
getattribute
getchar
getdocument
getelementbyid
getelementsbytagname
getmonth
getproperty
gets
getty
git clone
git pull
git push f
git 命令
git 使用