diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..ee9f695
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..8977715
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..11531af
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JavaCodeAcc.iml b/JavaCodeAcc.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/JavaCodeAcc.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/designpattern/bridge/Abstraction.java b/src/designpattern/bridge/Abstraction.java
index a180a7c..1366948 100644
--- a/src/designpattern/bridge/Abstraction.java
+++ b/src/designpattern/bridge/Abstraction.java
@@ -4,6 +4,8 @@
*
* @author liu yuning
*
+ * 有一个聚合线,哈,像一座桥。
+ * 由于实现的方式有多种,桥接模式的核心意图就是把这些实现独立出来,让它们各自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。
*/
public abstract class Abstraction {
protected Implementor implementor;// 桥接模式的关键,使得Abstraction聚合Implementor
@@ -13,6 +15,10 @@ public Abstraction(String name) {
this.setName(name);
}
+ /**
+ * 品牌需要关注软件,所以可在机器中安装软件,以备运行。
+ * @param implementor
+ */
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
@@ -31,6 +37,9 @@ public void setName(String name) {
}
}
+/**
+ * 可以看作是不同的品牌
+ */
class AbstractionA extends Abstraction {
public AbstractionA(String name) {
diff --git a/src/designpattern/bridge/BridgeClient.java b/src/designpattern/bridge/BridgeClient.java
index 0c676f5..d9810a2 100644
--- a/src/designpattern/bridge/BridgeClient.java
+++ b/src/designpattern/bridge/BridgeClient.java
@@ -2,7 +2,7 @@
/**
* 客户端
- *
+ * 我的理解就是实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
* @author liu yuning
*
*/
diff --git a/src/designpattern/bridge/Implementor.java b/src/designpattern/bridge/Implementor.java
index b5592b5..203d1fb 100644
--- a/src/designpattern/bridge/Implementor.java
+++ b/src/designpattern/bridge/Implementor.java
@@ -4,6 +4,8 @@
*
* @author liu yuning
*
+ * 可以看作是手机软件
+ *
*/
public abstract class Implementor {
diff --git a/src/designpattern/factory/method/FactoryClient.java b/src/designpattern/factory/method/FactoryClient.java
index 6e833d7..b456162 100644
--- a/src/designpattern/factory/method/FactoryClient.java
+++ b/src/designpattern/factory/method/FactoryClient.java
@@ -4,7 +4,9 @@
/**
* 工厂方法客户端
- *
+ *
+ *
+ * 由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。
* @author liu yuning
*
*/
diff --git a/src/designpattern/factory/method/IFactory.java b/src/designpattern/factory/method/IFactory.java
index d70ae69..4bdef68 100644
--- a/src/designpattern/factory/method/IFactory.java
+++ b/src/designpattern/factory/method/IFactory.java
@@ -8,7 +8,9 @@
/**
* 工厂接口
- *
+ *
+ * 简单工厂模式:简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
+ * 但是违反了开闭原则,如果需要增加新的功能,必须修改工厂类,这样就会造成工厂逻辑过于复杂。
* @author liu yuning
*
*/
diff --git a/src/designpattern/factory/simple/OperationFactory.java b/src/designpattern/factory/simple/OperationFactory.java
index 76aa9dc..e2cc1d0 100644
--- a/src/designpattern/factory/simple/OperationFactory.java
+++ b/src/designpattern/factory/simple/OperationFactory.java
@@ -2,7 +2,7 @@
/**
* 操作类工厂类
- *
+ * 到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂,来,
* @author liu yuning
*
*/
diff --git a/src/designpattern/strategy/Context.java b/src/designpattern/strategy/Context.java
index f595c4e..2e4b57f 100644
--- a/src/designpattern/strategy/Context.java
+++ b/src/designpattern/strategy/Context.java
@@ -7,14 +7,30 @@
*
*/
public class Context {
+
+ /**
+ * 去除掉原本的方法,采用实例变量的方式声明一个Strategy接口
+ * 每个Context对象会动态地设置这些变量以在运行时引用正确的行为类型。
+ */
Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
+ /**
+ * 动态设置策略
+ *
+ * @param strategy
+ */
+ public void setStrategy(Strategy strategy) {
+ this.strategy = strategy;
+ }
+
/**
* 上下文接口
+ *
+ * Context对象本身不处理算法,而是把这些工作委托给了Strategy接口。
*/
public void contextInterface() {
strategy.algorithmInterface();
diff --git a/src/designpattern/strategy/Strategy.java b/src/designpattern/strategy/Strategy.java
index 372b99b..40b2166 100644
--- a/src/designpattern/strategy/Strategy.java
+++ b/src/designpattern/strategy/Strategy.java
@@ -10,6 +10,9 @@ public interface Strategy {
public void algorithmInterface();
}
+/**
+ * 将每组行为想象成一个算法族,分别封装起来,让它们之间可以互相替换。
+ */
class ConcreteStrategyA implements Strategy {
@Override
diff --git a/src/designpattern/strategy/StrategyClient.java b/src/designpattern/strategy/StrategyClient.java
index acb7189..bc4bb6b 100644
--- a/src/designpattern/strategy/StrategyClient.java
+++ b/src/designpattern/strategy/StrategyClient.java
@@ -18,6 +18,10 @@ public static void main(String[] args) {
context = new Context(new ConcreteStrategyC());
context.contextInterface();
+ // 动态改变策略
+ // 在运行时想改变鸭子的行为,只需调用鸭子的setter方法就可以。
+ context.setStrategy(new ConcreteStrategyA());
+ context.contextInterface();
}
}