- 浏览: 762493 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、依赖注入在实现方式上简直是大同小异。有些可能侧重点不同。下面通过代码比较下他们之间的区别,pk下。
1、定义个接口
package com.cvicse.Ifruit; /** * 水果接口 * */ public interface Fruit { /** * 水果生长 */ public void grow(); /** * 吃水果 */ public void eat(); }
2、定义该接口的实现类
package com.cvicse.fruitImpl; import com.cvicse.Ifruit.Fruit; public class Apple implements Fruit { public void eat() { System.out.println("吃苹果!"); } public void grow() { System.out.println("苹果在生长!"); } } package com.cvicse.fruitImpl; import com.cvicse.Ifruit.Fruit; public class Orange implements Fruit { public void eat() { System.out.println("吃橘子!"); } public void grow() { System.out.println("橘子在生长!"); } }
3、定义最关键的部分,仔细观察他们的区别
工厂方法类
package com.cvicse.factory; import com.cvicse.Ifruit.Fruit; import com.cvicse.fruitImpl.Apple; import com.cvicse.fruitImpl.Orange; /** * 静态工厂类 */ public class FruitFactory { // 采用类的反射机制获取类的实例 public static Fruit fruitFactory(Class clazz) { Fruit fruit = null; try { fruit = (Fruit) Class.forName(clazz.getName()).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return fruit; } /** * 正宗静态方法 * * @param type * @return */ public static Fruit fruitFactory(String type) { Fruit fruit = null; if ("apple".equals(type)) { fruit = new Apple(); } else if ("orange".equals(type)) { fruit = new Orange(); } return fruit; } }
代理模式类
package com.cvicse.factory; import com.cvicse.Ifruit.Fruit; import com.cvicse.fruitImpl.Apple; /** * 代理模式实现类 * */ public class FruitProxy implements Fruit { private Fruit fruit; public FruitProxy() { this.fruit = new Apple(); } public FruitProxy(Fruit fruit) { this.fruit = fruit; } public void eat() { fruit.eat(); } public void grow() { fruit.grow(); } }
策略模式类
package com.cvicse.factory; import com.cvicse.Ifruit.Fruit; /** *策略模式实现 */ public class StrategyContext { private Fruit fruit; public StrategyContext(Fruit fruit) { this.fruit = fruit; } public void eat() { fruit.eat(); } public void grow() { fruit.grow(); } }
策略模式和工厂模式结合
package com.cvicse.factory; import com.cvicse.Ifruit.Fruit; import com.cvicse.fruitImpl.Apple; import com.cvicse.fruitImpl.Orange; public class StrategyFacoty { private Fruit fruit; public StrategyFacoty(String type) { if ("apple".equals(type)) { this.fruit = new Apple(); } else if ("orange".equals(type)) { this.fruit = new Orange(); } } public void eat() { fruit.eat(); } public void grow() { fruit.grow(); } }
总结:在实现上他们很相似,但有条原则是趋向遵从的就是组合优先,继承随后。
- design.rar (7.6 KB)
- 下载次数: 13
发表评论
-
面向对象设计原则-------总结
2015-07-14 10:55 0单一职能原则 ----- 设计类时,尽量功能单一,粒度合 ... -
MVC设计模式理解
2009-11-16 22:11 2079常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则---------迪米特原则
2009-10-15 21:15 3169迪米特原则(Law of Demeter) 1、迪米特原则的 ... -
面向对象设计的原则------接口隔离原则
2009-10-12 15:50 2802接口隔离原则(Interface ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3635依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2637里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2469开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3271学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1178gaojie -
组合模式-------树形模式
2009-08-03 20:42 22581、组合模式定义 ... -
命令模式
2009-08-02 14:06 18411、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1402ok -
适配器模式
2009-08-01 14:43 1188适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14761、外观模式 为子系统的一组接口提供一个一致的界 ... -
策略模式
2009-07-19 23:01 1359今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41411.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1340概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2234虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
工厂模式与DAO模式
2009-07-02 21:17 4418工厂模式是设计模式中较简单的模式,但在项目的开发过 ... -
动态代理模式
2009-06-30 22:25 15142.动态代理类 Java动态代理类位于Ja ...
相关推荐
10. **代理模式(Proxy)**:Spring AOP的核心就是代理模式,它创建了目标对象的代理,代理对象在调用实际目标方法之前/之后执行额外的逻辑(如日志、事务管理等),提供了对对象行为的扩展。 11. **模板方法模式...
1. 创建型模式:包括单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式、原型模式。这类模式主要关注如何创建对象,减少对象创建过程中的耦合,使得对象的创建更加灵活。 2. 结构型模式:如代理模式...
包括单例模式、工厂模式、观察者模式、装饰器模式、代理模式、适配器模式、桥接模式、建造者模式、组合模式、享元模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、状态模式、策略模式、模板方法...
在C#中,可以使用简单工厂、工厂方法或者抽象工厂模式来适应不同层次的抽象。 三、观察者模式 观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。C#...
- 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...
从创建型模式(如工厂模式、建造者模式)到结构型模式(如适配器模式、组合模式),再到行为型模式(如观察者模式、策略模式),每种模式都有其独特的应用场景和优点。掌握这些设计模式不仅有助于我们编写出更高质量...
其中包括适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。比如,装饰器模式可以在不修改原有类的基础上动态地为对象添加新的行为或职责。 3. **行为型模式**:这类模式主要关注对象...
1. 策略模式(Strategy Pattern):允许在运行时选择算法的行为,如书中提到的“锦囊妙计”例子,通过不同的策略应对不同的情形。 2. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问,常...
- 策略模式:定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法的变化独立于使用它的客户。 - 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法...
- **行为型模式**:关注对象间的职责分配,如策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、中介者模式、备忘录模式、状态模式、访问者模式和解释器模式。 #### 设计模式的价值 设计模式的价值不仅...
- 简单工厂模式(非23种设计模式之一):通过一个工厂类来创建对象,简化客户端代码。 - 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式:提供一个接口,用于创建相关或依赖对象...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
例如,使用工厂模式可以隐藏对象创建的复杂性,而代理模式则可以用于延迟加载或者增加安全控制等。 在Java中实现设计模式,需要理解面向对象的基本原则,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则...
3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. 建造者模式(Builder):将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。...
策略模式让算法独立于使用它的客户而变化,适用于需要在运行时动态选择算法的场景。 4. **Composite(组合)模式**:此模式允许开发者将对象组合成树形结构以表示“部分-整体”的层次结构。Composite 模式使得用户...
结构型模式则关注如何组合类和对象以构建更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy)。行为型模式则关注对象之间的通信和责任分配,如观察者模式(Observer)、策略模式...
抽象工厂模式提供了一个接口,用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。这种方法非常适合于需要创建多个相关对象但希望保持高层模块与具体实现解耦的情况。在C#中,可以通过定义抽象基类或...
接着,书中会详细讲解各种常见的设计模式,包括创建型模式(如单例模式、工厂模式、抽象工厂模式等)、结构型模式(如适配器模式、代理模式、装饰器模式等)以及行为型模式(如观察者模式、策略模式、职责链模式等)...
包括创建型模式(如单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式),结构型模式(如适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式、代理模式),以及行为型模式(如策略模式、...