博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式随笔一
阅读量:4029 次
发布时间:2019-05-24

本文共 2914 字,大约阅读时间需要 9 分钟。

六个原则(Solid)

Single Responsibility Principle:单一职责原则--接口职责单一,类的设计尽量只有一个原因引起变化。

Open Closed Principle:开闭原则--一个软件实体如类(抽象)、模块、方法应该对扩展开放,对修改关闭。

Liskov Substitution Principle:里氏替换原则--父类能出现的地方,子类就可以替换父类。

Law of Demeter:迪米特法则--一个对象应该对其他对象有最少的了解(合理的公开public方法,尽量最少)。

Interface Segregation Principle:接口隔离原则--建立单一接口,不要建立臃肿庞大的接口(为模块提供单一接口)。

Dependence Inversion Principle:依赖倒置原则--面向接口(抽象类)编程。

设计模式

1.单例模式

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

public final  class Singleton {	private static final Singleton INSTANCE = new Singleton();		private Singleton(){}		public static Singleton getInstance() {		return INSTANCE;	}		public static void otherMethod(){			}}
//多线程版本
public static Singleton getInstance(){          if (instance == null)              synchronized(instance){                  if(instance == null)                      instance = new Singleton();              }          return instance;       }
//按需加载
public class Singleton{          private Singleton(){              …          }          private static class SingletonContainer{              private static Singleton instance = new Singleton();          }          public static Singleton getInstance(){              return SingletonContainer.instance;          }      }
 Note:在并发编程中,需要考虑同步处理。 

2.工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义。产品就是对象,就是要创建的对象。

一个通用的例子

// 抽象产品:对象	public abstract class Product {		// 公共方法		public void pubMethod() {			// 具体逻辑实现		}		// 抽象方法		public abstract void absMethod();	}	// 具体产品	public class ConcreteProduct extends Product {		private ConcreteProduct(){}		@Override		public void absMethod() {			// 具体实现		}	}	// 抽象工厂	public abstract class Factory {		// 创建产品,更加参数创建		public abstract 
T create(Class
clazz); } // 具体工厂 public class ConcreteFactory extends Factory { @SuppressWarnings("unchecked") @Override public
T create(Class
clazz) { try { Product product = null; product = (Product) Class.forName(clazz.getName()) .newInstance(); return (T) product; } catch (Exception e) { e.printStackTrace(); } return null; } } public static void main(String[] args) { Factory fac = new ConcreteFactory(); Product pro = fac.create(ConcreteProduct.class); }
在单一场景中,修改为简单工厂模式

// 简单工厂	public class SimpleFactory  { 		@SuppressWarnings("unchecked")		public 
T create(Class
clazz) { try { Product product = null; product = (Product) Class.forName(clazz.getName()) .newInstance(); return (T) product; } catch (Exception e) { e.printStackTrace(); } return null; } }
延迟初始化中应用工厂模式

public final class MapFactory {	private static final Map
map = new HashMap<>(); public static synchronized Product create(String name) { Product p = null; if (map.containsKey(name)) { p = map.get(name); } else { p = new ConcreteProduct(); map.put(name, p); } return p; }}



转载地址:http://irlbi.baihongyu.com/

你可能感兴趣的文章
子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
查看>>
android:style和theme
查看>>
wait()、notify()和notifyAll()、sleep()、Condition、await()、signal()
查看>>
Arrays.asList()
查看>>
Big Endian 和 Little Endian
查看>>
java中重写方法应遵循规则
查看>>
Comparable的使用(用于Arrays.sort)
查看>>
Comparator(用于Arrays.sort)
查看>>
对自己的计划
查看>>
反应c语言程序结构特点的程序
查看>>
Android错误总结
查看>>
android margin
查看>>
Drawable setBounds()中的rect
查看>>
markdown编辑器
查看>>
过拟合原因及解决
查看>>
支持向量机(SVM)初探
查看>>
决策树与随机森林初探
查看>>
相似度与距离算法种类总结
查看>>
贝叶斯
查看>>
推荐系统总结
查看>>