面经整理-设计模式
来源:互联网 发布:经典算法面试题及答案 编辑:程序博客网 时间:2024/05/18 01:47
本文是作者整理的个人笔记,文中可能引用到其他人的成果但是未指明出处,如有不妥,请指正,谢谢!
转载注明:http://blog.csdn.net/u012294820/article/details/78733998
单例的实现方式(懒汉,恶汉,静态内部类,枚举,双重检查)
参考一:http://note.youdao.com/noteshare?id=571f8ae9d2d2c5265b43136d5e65673f&sub=374A446B97EC464180FA90A3BC1F4378
单例模式的好处
- 确保全局唯一性
- 节约系统资源
- 避免对共享资源的多场占用
观察者模式
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
//观察者:public class WeixinUser implements Observer { private String name; public WeixinUser(String name) { this.name = name; } public void update(String message) { System.out.println(name + "-" + message); }}//被观察者:public class SubscriptionSubject implements Subject { private List<Observer> weixinUserlist = new ArrayList<Observer>(); public void attach(Observer observer) { weixinUserlist.add(observer); } public void detach(Observer observer) { weixinUserlist.remove(observer); } public void notify(String message) { for (Observer observer : weixinUserlist) { observer.update(message); } }}//客户端:public class Client { public static void main(String[] args) { SubscriptionSubject mSubscriptionSubject=new SubscriptionSubject(); //创建微信用户 WeixinUser user1=new WeixinUser("杨影枫"); WeixinUser user2=new WeixinUser("月眉儿"); WeixinUser user3=new WeixinUser("紫轩"); //订阅公众号 mSubscriptionSubject.attach(user1); mSubscriptionSubject.attach(user2); mSubscriptionSubject.attach(user3); //公众号更新发出消息给订阅的微信用户 mSubscriptionSubject.notify("刘望舒的专栏更新了"); }}
举例:Android中BaseAdapter是被观察者,ListView是观察者
装饰器模式和代理模式的区别
装饰器模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;
代理模式:给一个对象提供一个代理对象,并由代理对象来控制对原有对象的引用;
区别:
- 代理模式,在一个代理类中创建被代理对象的实例。
- 装饰器模式,将原始对象作为一个参数传给装饰器的构造器。
举例:
- 代理模式:1)Spring AOP动态代理,2)Struts2中Action代理
- 装饰器模式:文件IO流,BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/text.txt"))));
代理模式:
//代理对象public class Proxy implements Subject{ private Subject subject; public Proxy(){ //关系在编译时确定 subject = new RealSubject(); } public void doAction(){ …. subject.doAction(); …. }}//代理的客户public class Client{ public static void main(String[] args){ //客户不知道代理委托了另一个对象 Subject subject = new Proxy(); }}
装饰器模式:
//装饰器对象public class Decorator implements Component{ private Component component; public Decorator(Component component){ this.component = component } public void operation(){ …. component.operation(); …. }}//装饰器的客户public class Client{ public static void main(String[] args){ //客户指定了装饰者需要装饰的是哪一个类 Component component = new Decorator(new ConcreteComponent()); }}
参考一:装饰模式与代理模式的区别(转载)
工厂方法模式
同一个工厂,同一个方法,根据参数生产不同的对象
public class Factory { //可以在工厂类中添加任何你所需要的逻辑 public static Product create(String str) { //生成ProductA if(str.equalsIgnoreCase("ProductA")) { return new ProductA(); } else //生成ProductB if(str.equalsIgnoreCase("ProductB")) { return new ProductB(); } return null; } }
工厂方法模式
不同的工厂,生产不同的产品
public class FactoryA implements Factory { //实现工厂类的方法生成产品类A public Product createProduct() { return new ProductA(); } } public class FactoryB implements Factory { //实现工厂类的方法生成产品类B public Product createProduct() { return new ProductB(); } }
抽象工厂模式
不同的工厂,生产不同类型的产品,而同一个工厂可以生产同一个类型的多种产品
public class FactoryA implements Factory { @Override public Product createProduct() { return new ProductA(); } @Override public Gift createGift() { return new GiftA(); } } public class FactoryB implements Factory { @Override public Product createProduct() { return new ProductB(); } @Override public Gift createGift() { return new GiftB(); } }
阅读全文
0 0
- 面经整理-设计模式
- 面试题整理--Java设计模式--结构型模式
- 面试题整理--Java设计模式--行为型模式
- 面试题整理--Java设计模式--创建型模式
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
- 设计模式整理
- Headfirst设计模式 整理
- 设计模式(待整理)
- 设计模式简单整理
- 设计模式 知识整理
- java设计模式整理
- 设计模式汇总整理
- 设计模式概述【整理】
- 设计模式汇总整理
- 设计模式整理
- 设计模式部分整理
- Swift设计模式整理
- scala实现数值类型加法
- Serializable
- Centos安装引导出错(Fast TSC calibration failed)
- LDAP + redmine + gerrit + jenkins + gitlab -- 使用LAM(LDAP Account Manager)管理用户
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量
- 面经整理-设计模式
- SpringBoot系列<一>快速入门
- 带你逐步深入了解SSH框架——struts2值栈
- mybatis lazy
- 安装好tensorflow以后用pycharm import
- 文章标题
- Elasticsearch6.0及其head插件安装
- Django的是如何工作的
- C++中的istringstream 的用法