医院网站建设合同,做微商那个网站好,网站制作开发公司,中国电信安徽分公司招聘网站设计模式#xff08;Design pattern#xff09;是一套被反复使用的代码设计经验的总结。使用设计模式的目的是为了可重用代码让代码更容易被他人理解
设计模式的运用#xff0c;有助于代码的维护与拓展。任何模式的出现#xff0c;都是为了解决一些特定的场景的耦合问题Design pattern是一套被反复使用的代码设计经验的总结。使用设计模式的目的是为了可重用代码让代码更容易被他人理解
设计模式的运用有助于代码的维护与拓展。任何模式的出现都是为了解决一些特定的场景的耦合问题以达到对修改封闭对扩展开放的效果。 1、实现Build步骤 1、创建实体类2、创建实体内部build类3、实体内部类返回实体类4、实体类创建内部类构造函数/*** 作者created by meixi* 邮箱15913707499163.com* 日期2018/12/14 11*/
public class PersonBuildertest {private String name;private int idd;public PersonBuildertest(Builder builder) {this.name builder.name;this.idd builder.idd;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getIdd() {return idd;}public void setIdd(int idd) {this.idd idd;}public static class Builder {private String name;private int idd;public Builder name(String namein) {this.name namein;return this;}public Builder idd(int id){this.idd id;return this;}public PersonBuildertest build(){return new PersonBuildertest(this);}}
}
使用方法
PersonBuildertest buildertest builder.name(那么).idd(2).build();
Log.i(lgq,builerttttbuildertest.getName());
12-14 13:45:03.313 21756-21756/? I/lgq: builertttt那么 2、原型模式 实现步骤
1、实现Cloneable接口
2、重写Object的clone方法
3、实现clone方法中的拷贝逻辑 public class Clonetest implements Cloneable{private String name;private int age;public Clonetest(){}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}Overridepublic Object clone(){Clonetest personnull;try {person(Clonetest)super.clone();person.namethis.name;person.agethis.age;} catch (CloneNotSupportedException e) {e.printStackTrace();}return person;}
}使用方法
Clonetest pnew Clonetest();
p.setAge(18);
p.setName(张三);Clonetest p1 (Clonetest) p.clone();p1.setName(李四);
Log.i(lgq,builerttttp1.getName()....p1.getAge()); 12-14 13:45:03.313 21756-21756/? I/lgq: builertttt李四....18 3、单例模式的实现步骤
1、静态实例 2、私有化构造方法 3、静态获取实例的函数双重null判断synchronize同步处理—— 使用synchronized 进行同步处理并且双重判断是否为null我们看到synchronized (Singleton.class)里面又进行了是否为null的判断这是因为一个线程进入了该代码如果另一个线程在等待这时候前一个线程创建了一个实例出来完毕后另一个线程获得锁进入该同步代码实例已经存在没必要再次创建因此这个判断是否是null还是必须的。 public class Singleton { private static volatile Singleton instance null; private Singleton(){ } public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { if (instance null) { instance new Singleton(); } } } return instance; } }
activity管理类
public class ActivityManager { private static volatile ActivityManager instance; private StackActivity mActivityStack new StackActivity(); private ActivityManager(){ } public static ActivityManager getInstance(){ if (instance null) { synchronized (ActivityManager.class) { if (instance null) { instance new ActivityManager(); } } return instance; } public void addActicity(Activity act){ mActivityStack.push(act); } public void removeActivity(Activity act){ mActivityStack.remove(act); } public void killMyProcess(){ int nCount mActivityStack.size(); for (int i nCount - 1; i 0; i--) { Activity activity mActivityStack.get(i); activity.finish(); } mActivityStack.clear(); android.os.Process.killProcess(android.os.Process.myPid()); }
} 4、观察者模式
主要三个类
1、
public interface Observer { void update(int id,String param); } 2、
public interface Subject { /** * 注册一个观察者 */ void addObserver(Observer observer); /** * 删除一个观察者 * * return 是否删除成功 */ boolean removeObserver(Observer observer); /** * 通知所有的观察者 * * param id 对应观察者的id */ void notifyObserver(int id,String param); } 3、
public class TestObServernotice implements Subject { private static Subject subject; private ListObserver observers new ArrayList(); private TestObServernotice() { // TODO Auto-generated constructor stub } public static Subject getInstance() { if (null subject) { synchronized (TestObServernotice.class) { if (null subject) subject new TestObServernotice(); } } return subject; } Override public void addObserver(Observer observer) { // TODO Auto-generated method stub observers.add(observer); } Override public boolean removeObserver(Observer observer) { // TODO Auto-generated method stub return observers.remove(observer); } Override public void notifyObserver(int id,String param) { // TODO Auto-generated method stub for (Observer observer : observers) { observer.update(id,param); } } } 观察者中注册Observer如MainActivity中注册
private Observer deleteObserver new Observer() { Override public void update(int id,String param) { tomapte.setText(sssssymdparam);//dosomething } }; TestObServernotice.getInstance().addObserver(deleteObserver); 同时注意删除观察者
Override protected void onDestroy() { super.onDestroy(); TestObServernotice.getInstance().removeObserver(deleteObserver); deleteObserver null; Log.v(lgq, ......11..onDestroy....); } 调用通知观察者主要在receiver中调用fragmentactivity都可以调用跨界面刷新数据
TestObServernotice.getInstance().notifyObserver(0,bundle.getString(cn.jpush.android.ALERT)); 5、命令模式
实现步骤
1创建命令接受者
//命令接收者Receiver
public class Tv {public int currentChannel 0;public void turnOn() {System.out.println(lgqThe televisino is on.);}public void turnOff() {System.out.println(The television is off.);}public void changeChannel(int channel) {this.currentChannel channel;System.out.println(Now TV channel is channel);}
}
2定义命令的接口声明执行的方法。
//执行命令的接口
public interface Command {void execute();
}3命令接口实现对象
//开机命令ConcreteCommand获取接受者类实现命令
public class CommandOn implements Command {private Tv myTv;public CommandOn(Tv tv) {myTv tv;}public void execute() {myTv.turnOn();}
}
4要求命令对象执行请求通常会持有命令对象
//可以看作是遥控器Invoker
public class Control {private Command onCommand, offCommand, changeChannel;public Control(Command on) {onCommand on;}public void turnOn() {onCommand.execute();}// public void turnOff() {
// offCommand.execute();
// }
//
// public void changeChannel() {
// changeChannel.execute();
// }
}
5组装命令对象和接收者 // 命令接收者ReceiverTv myTv new Tv();// 开机命令ConcreteCommondCommandOn on new CommandOn(myTv);// on.execute();// 命令控制对象Invoker组装接受者命令对象Control control new Control(on);// 开机control.turnOn();