现在来讲一件很有意思的故事,上面的画很纯洁,只有一种蓝色。但不得不说这图片还是有色差,不能很好的还原实际的色彩,如果有你机会,可以去看下他的IKB
色彩是多么的蓝。
这种蓝被叫做国际克莱因蓝
(international klein blue,缩写IKB),以伊夫·克莱因
(Yves Klein)的名字来命名的。
这一种独特的天青石蓝色是在他的化学家友人EdouardAdam
的帮助下合成的。
克莱因相信,只有最单纯的色彩才能唤起最强烈的心灵感受力。
一些艺术家使用各种色彩以求获得艺术生命力,而克莱因宁愿回归单纯。
“克莱因蓝”的 RGB 比值是0:47:147,但是明确的数据并不能减少人们面对它时那种震惊——蓝色本身象征着天空和海洋,象征着没有界限,又因为“克莱因蓝”太过纯净,以至于很难找到可与之搭配的色彩进入人们的视野,因此,它的冲击力格外强烈。
这种蓝被誉为一种理想之蓝、绝对之蓝,其明净空旷往往使人迷失其中。
克莱因曾说:“表达这种感觉,不用解释,也无需语言,就能让心灵感知——我相信,这就是引导我画单色画的感觉。”
当然啦,现在他的画那是厉害啊,例如他的《IKB 92》卖了一个多亿。也像这个一样,纯蓝色!!!
好了,看完这个故事,现在我们来做一个颜料板,用于生成艺术家想要的颜色。
代码实现
来看下我们的颜料板
public class IkbColorBuilder extends ColorBuilder {
private IkbColorModel ikbColor = new IkbColorModel();
@Override
public void setSequence(List<Integer> sequence) {
ikbColor.setColorList(sequence);
}
public IkbColorBuilder addGreenSeq() {
this.ikbColor.getColorList().add(Color.GREEN);
return this;
}
public IkbColorBuilder addBlueSeq() {
this.ikbColor.getColorList().add(Color.BLUE);
return this;
}
public IkbColorBuilder addRedSeq() {
this.ikbColor.getColorList().add(Color.RED);
return this;
}
@Override
public ColorModel getColorModel() {
return this.ikbColor;
}
}
public abstract class ColorBuilder {
public abstract void setSequence(List<Integer> sequence);
public abstract ColorModel getColorModel();
}
我们的颜料板做的还是很简单的,根据用户的需要,可以不断的加R,G,B三种颜色。
接着是我们的颜料模型,不同材料做出来的颜色是不一样的
就像有统一的步骤,但中间用材不当,做出来的菜味道显然不会完全一样。
public abstract class ColorModel {
List<Integer> colorList = new ArrayList<>();
final public void generateColor() {
for (int color : colorList) {
if (color == Color.GREEN) {
addGreenMaterial();
} else if (color == Color.RED) {
addRedMaterial();
} else if (color == Color.BLUE) {
addBlueMaterial();
}
}
}
abstract void addRedMaterial();
abstract void addGreenMaterial();
abstract void addBlueMaterial();
public List<Integer> getColorList() {
return colorList;
}
public void setColorList(List<Integer> colorList) {
this.colorList = colorList;
}
}
这个是我们的model,他可以根据知道的颜料添加不同的颜料素材下去。从而生成我们需要的
public class IkbColorModel extends ColorModel {
@Override
void addRedMaterial() {
System.out.println("添加特别的红色材料");
}
@Override
void addGreenMaterial() {
System.out.println("添加特别的绿色材料");
}
@Override
void addBlueMaterial() {
System.out.println("添加特别的蓝色材料");
}
}
而我们的具体的色彩只需要实现各个方法,去提供他们特有的素材就可以了。
public class Client {
public static void main(String[] args) {
IkbColorBuilder builder = new IkbColorBuilder();
IkbColorModel colorModel = (IkbColorModel) builder.addBlueSeq().addGreenSeq().addRedSeq().addBlueSeq().getColorModel();
colorModel.generateColor();
}
}
这样我们就可以利用构建者模型来生成我们的IKB颜色。然后绘制名画了!
不过时代发展到现在,很多东西都是现成搞好的了,我们不再需要自己去调出来特定的色。
一般都可以直接去买回来用,因此我们有多下面这个
public class Director {
private List<Integer> colorSeq = new ArrayList<>();
private IkbColorBuilder ikbColorBuilder = new IkbColorBuilder();
public IkbColorModel getIkbColor() {
this.colorSeq.clear();
this.colorSeq.add(Color.BLUE);
this.colorSeq.add(Color.GREEN);
this.colorSeq.add(Color.RED);
this.colorSeq.add(Color.BLUE);
this.colorSeq.add(Color.BLUE);
this.ikbColorBuilder.setSequence(colorSeq);
return (IkbColorModel) this.ikbColorBuilder.getColorModel();
}
public ColorModel getYxbColor() {
this.colorSeq.clear();
this.colorSeq.add(Color.BLUE);
this.colorSeq.add(Color.GREEN);
this.colorSeq.add(Color.RED);
this.ikbColorBuilder.setSequence(colorSeq);
return this.ikbColorBuilder.getColorModel();
}
public ColorModel getEaxColor() {
this.colorSeq.clear();
this.colorSeq.add(Color.BLUE);
this.colorSeq.add(Color.GREEN);
this.colorSeq.add(Color.BLUE);
this.ikbColorBuilder.setSequence(colorSeq);
return this.ikbColorBuilder.getColorModel();
}
}
他封装了很多我们常用的颜料配置色彩,我们直接用就好了
public class Client {
public static void main(String[] args) {
Director director = new Director();
ColorModel colorModel = director.getIkbColor()
colorModel.generateColor();
}
}
类图
后记
用弄好的色彩颜料表达出不一样的东西,还是挺有意思的.
我们有了颜料,但如何画,画得如何,就靠个人造诣。
画出一幅梵高的《星空》
还是什么印象日出的
写完这篇,创建模式的五个都写完了,构建模式也只剩下共享模式和组合模式,同时还有行为模式的五个模式,责任链,纪念品,中介,解释器,访问。