设计模式|观察者模式

观察者模式定义了一种一对多的依赖关系, 让多个观察对像同时监听某一个对象, 这个对象在改变时会通知所有观察者。 代码 1 在这个小例子中, 由间谍 spy 扮演被观察者窃取, 当间谍发现甲国家的秘密信息后它的状态改变, 然后通知扮演观察者的乙丙国, 乙丙国在收到 spy 的信息后会做出不一样的判断。 1public abstract class Country { 2 protected String countryName; 3 protected Spy007 spy; 4 5 public Country(String countryName, Spy007 spy) { 6 this.countryName = countryName; 7 this.spy = spy; 8 } 9 10 public abstract void update(); 11} 1public class CountryA extends Country{ 2 3 public CountryA(String countryName, Spy007 spy) { 4 super(countryName, spy); 5 } 6 7 /** 8 * 获取情报的方

设计模式|状态模式

在状态模式中,当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了它的类。 代码 1public abstract class State { 2 public String stateName; 3 public abstract void handle(Context context); 4} 1public class Context { 2 private State state; 3 4 public Context(State state) { 5 this.state = state; 6 } 7 8 public void setState(State state) { 9 10 System.out.println("当前状态为: "+this.state.stateName); 11 this.state = state; 12 System.out.println("状态变更为: "+this.state.stateName); 13 System.out.println("--------------------"); 14 } 15 16 public void request(){ 17 state.handle(this); 18 } 19} 1public class ConcreteStateA extends State { 2 public ConcreteStateA(){ 3 stateName = "状态A"; 4 }

设计模式|策略模式

策略模式定义了算法家族, 分别封装起来, 让他们之间可以相互替换, 此模式让算法的变化影响到使用的客户。 代码 1public interface Strategy { 2 void Algorithm(); 3} 1public class StrategyA implements Strategy { 2 @Override 3 public void Algorithm() { 4 System.out.println("使用了StrategyA的算法"); 5 } 6} 1public class StrategyB implements Strategy{ 2 @Override 3 public void Algorithm() { 4 System.out.println("使用了StrategyB的算法"); 5 } 6} 1public class Context{ 2 Strategy strategy; 3 4 public Context(Strategy strategy) { 5 this.strategy = strategy;

Git教程文档

之前学习 git 是在廖雪峰老师的网站上,廖雪峰老师的 Git 教程也是非常不错的,举的例子很生动。

作为一个合格的开发人员,熟练使用 Git 是必要的。

现在多人开发项目没有一个合作开发的工具是不行的,在 Git 诞生之前 SVN 很流行,它属于一种集中式的开发写作工具,而 Git 是一种分布式的代码管理工具,二者各有优缺点,SVN 集中式管理使代码相对来说比较安全,但是当用户数量上来后服务器带宽和处理压力也就上来了,所多人在 SVN 系统上合作开发对服务器要求较高些,在 Git 这边,每一个都可以独立工作,每一个都是主仓库的一个副本,即使主仓库被破坏代码也不会造成过大损失。

还回到 Git 教程,看了 Git 官网的教程,突然觉得廖老师的 Git 教程不香了。

设计模式|模板方法

模板方法(TemplateMethod)定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中, 使得子类可以不改变一个算法的结构即可重新定义算法的某些特定的步骤。 类关系 1 +--------------------+ 2 | AbstractClass | 3 +-^-----------^------+ 4 extends | | 5 +----+ +--+ extends 6 | | 7+--------+--------+ +-----+------------+ 8| ImplClassA | | ImplClassB | 9+-----------------+ +------------------+ 1public abstract class AbstractClass { 2 abstract void methodA(); 3 4 abstract void methodB(); 5 6 abstract void methodC(); 7 8 void executeTemplateMethod() { 9 methodA(); 10 methodB(); 11 methodC(); 12 } 13} 1public class ImplClassA extends AbstractClass { 2 @Override 3 void methodA() { 4 System.out.println("ClassA的methodA方法执行

设计模式|代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 静态代理的关键:代理类(SubjectProxy)实现被代理类的接口(ISubject)。 类结构 1 +-------------+ 2 | | 3 | ISubject interface 4 | | 5 +-^---------^-+ 6 | | 7 implement |implement 8 | | 9 | | 10+--------------+-+ ++--------------+ 11| | | | 12| SubjectProxy | | Subject | 13+----------------+ +---------------+ 代码 1public interface ISubject { 2 void request(); 3} 1public class Subject implements ISubject { 2 @Override 3 public void request() { 4 System.out.println("Subject的request方法执行了."); 5 } 6} 1public class SubjectProxy implements ISubject

设计模式|外观模式

外观模式为子系统的中的一组接口提供一个一致的界面, 此模式定义了一个高层接口个, 这个接口使子系统更加容易使用。 其本质是:方法调用再封装。 代码 1public class SubA { 2 void methodA(){ 3 System.out.println("SubA的methodA执行了."); 4 } 5} 6 7public class SubB { 8 void methodB(){ 9 System.out.println("SubB的方法methodB执行了."); 10 } 11} 12 13public class SubC { 14 void methodC(){ 15 Sys

设计模式|享元模式

运用享元模式(Flyweight)可以有效地支持大量细粒度的对象。 类结构 代码 1package com.elltor.designpattern.Flyweight; 2 3public interface Flyweight { 4 void operation(int i); 5} 1package com.elltor.designpattern.Flyweight; 2 3public class ConcreteFlyweight implements Flyweight { 4 5 @Override 6 public void operation(int i) { 7 System.out.println("具体的享元对象: "+i); 8 } 9} 1package com.elltor.designpattern.Flyweight; 2 3import java.util.HashMap; 4 5public class FlyweightFcatory { 6 private HashMap<String,ConcreteFlyweight> flyweightMap = new HashMap<>(); 7 8 public FlyweightFcatory() { 9 flyweightMap.put("A",new ConcreteFlyweight()); 10 flyweightMap.put("B",new ConcreteFlyweight()); 11 flyweightMap.put("C",new ConcreteFlyweight()); 12 flyweightMap.put("D",new ConcreteFlyweight()); 13 flyweightMap.put("E",new ConcreteFlyweight()); 14 } 15 16 public Flyweight getFlyweight(String key){ 17 return flyweightMap.get(key); 18 } 19} 1package com.elltor.designpattern.Flyweight; 2 3public class UnsharedFlyweight implements Flyweight { 4 @Override 5 public void operation(int i) { 6 System.out.println("不被

设计模式|组合模式

组合模式适合表示部分-整体, 例如大学-院系、部门-企业等。 类结构 代码 1package com.elltor.designpattern.compose; 2 3public abstract class Component { 4 protected String componentName; 5 6 7 public Component(String componentName) { 8 this.componentName = componentName; 9 } 10 11 public abstract void add(Component component); 12 13 public abstract void remove(Component component); 14 15 public abstract void show(int depth); 16} 1package com.elltor.designpattern.compose; 2 3import java.util.ArrayList; 4import java.util.List; 5 6public class Composite extends Component { 7 private List<Component> childList = new ArrayList<>(); 8 9 public Composite(String componentName) { 10 super(componentName); 11 } 12 13 @Override 14 public void add(Component component) { 15 childList.add(component); 16 } 17 18 @Override 19 public void remove(Component component) { 20 childList.remove(component); 21 } 22 23 @Override 24 public void show(int depth) { 25 for(int i=0;i<depth;i++){ 26 System.out.print('+'); 27 } 28 29 System.out.println(componentName); 30 31 for(int i=0;i<childList.size();i++){ 32 childList.get(i).show(depth+2); 33 } 34 } 35} 1package com.elltor.designpattern.compose; 2 3public class Leaf extends Component { 4 public Leaf(String componentName) { 5 super(componentName); 6 } 7 8 @Override 9 public void add(Component component) { 10 Syst

设计模式|装饰者模式

结构图 代码 1package com.elltor.designpattern.decorate; 2 3public interface Component { 4 void operate(); 5} 1package com.elltor.designpattern.decorate; 2 3public class ConcreteComponent implements Component { 4 @Override 5 public void operate() { 6 System.out.println("ConcreteComponent operate....(origin)"); 7 } 8} 1package com.elltor.designpattern.decorate; 2 3public class Decorator implements Component { 4 protected Component component; 5 6 public void setComponent(Component component){ 7 this.component=component; 8 } 9 10 11 @Override 12 public void operate() { 13 if(this.component!=null){ 14 component.operate(); 15 } 16 } 17} 1package com.elltor.designpattern.decorate; 2 3public class Decorator implements Component { 4 protected Component component; 5 6 public void setComponent(Component component){ 7 this.component=component; 8 } 9 10 11 @Override 12 public void operate() { 13 if(this.component!=null){ 14 component.operate(); 15 } 16 } 17} 1package com.elltor.designpattern.decorate; 2 3public class ConcreteDecoratorA extends Decorator { 4 String info = "ConcreteDecoratorA"; 5 6 7 // 并不太好 8 @Override 9 public void operate() { 10 super.operate(); 11 System.out.println("装饰一下..............")