简单?工?厂模式 (Simple Factory Pattern)

@interface ViewController ()
{
    Shape *_shape;
}

@end

@implementation ViewController

- (void)loadView
{
    //设置画板
    self.view=[[SimpleDrawBoard alloc]init];
    self.view.backgroundColor=[UIColor whiteColor];
}
- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    CGPoint point=[touch locationInView:self.view];
    //工厂生产形状
    _shape=[Factory shapeWithType:kRud];
//    _shape.fillColor=[UIColor blackColor];
    [_shape addPoint:point];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    CGPoint point=[touch locationInView:self.view];
    SimpleDrawBoard *board=(SimpleDrawBoard *)self.view;
    [_shape addPoint:point];
    [board drawShape:_shape];
}

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    CGPoint point=[touch locationInView:self.view];
    [_shape addPoint:point];
    SimpleDrawBoard *board=(SimpleDrawBoard *)self.view;
    [board drawShape:_shape];
}

//
//  SimpleDrawBoard.m
//  Facetory-0904
//
//  Created by apple on 14-9-4.
//  Copyright (c) 2014年 apple. All rights reserved.
//

#import "SimpleDrawBoard.h"
@interface SimpleDrawBoard()
{
    Shape *_shape;
}
@end

@implementation SimpleDrawBoard

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    CGContextRef context=UIGraphicsGetCurrentContext();
    [_shape draw:context];
}

- (void)drawShape:(Shape *)shape
{
    _shape=shape;
    [self setNeedsDisplay];
}

@end

//
//  Shape.m
//  Facetory-0904
//
//  Created by apple on 14-9-4.
//  Copyright (c) 2014年 apple. All rights reserved.
//

#import "Shape.h"

@implementation Shape

- (void)addPoint:(CGPoint)point
{
    [self doesNotRecognizeSelector:_cmd];
}

- (void)draw:(CGContextRef)context
{
    if (_fillColor)
    {
        [_fillColor setFill];
    }
    if (_lineWidth)
    {
        CGContextSetLineWidth(context, _lineWidth);
    }
    if (_strokColor)
    {
        [_strokColor setStroke];
    }
}
@end

//
//  Rud.m
//  SimpleDrawBoard
//
//  Created by apple on 14-9-4.
//  Copyright (c) 2014年 戴维营教育. All rights reserved.
//

#import "Rud.h"
#include "math.h"

@interface Rud ()
{
    CGPoint _startPoint;
    CGPoint _endPoint;
    CGFloat rid;
    BOOL bEnd;
}
@end

@implementation Rud
- (void)addPoint:(CGPoint)position
{
    if (!bEnd) {
        _startPoint = position;
        bEnd = YES;
    }
    else {
        _endPoint = position;
        CGFloat r=(_endPoint.x - _startPoint.x)*(_endPoint.x - _startPoint.x)+(_endPoint.y - _startPoint.y)*(_endPoint.y - _startPoint.y);
        rid=sqrtf(r);
    }
}

- (void)draw:(CGContextRef)context
{
    [super draw:context];
    CGRect rect = CGRectMake(_startPoint.x-rid, _startPoint.y-rid,rid*2,rid*2);

    CGContextAddEllipseInRect(context, rect);
    CGContextDrawPath(context, kCGPathEOFillStroke);
}
@end
时间: 2024-10-05 16:04:33

简单?工?厂模式 (Simple Factory Pattern)的相关文章

简单工厂模式( Simple Factory Pattern )

1. 简单工厂模式( Simple Factory Pattern ) 1.1. 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮.矩形按钮.菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式. 1.2

大白话简单工厂模式 (Simple Factory Pattern)

大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车.4S店接受订单后,向工厂说明车型,工厂随后进行汽车制造,运输到4S店中再到了小两口的手上,小两口终于成了有车一族. 仔细分析,4S销售模式即为典型的简单工厂模式.下面从代码的角度进行分析. 无工厂模式 首先,我们先分析4S店最初的模式(企业个人作坊阶段,无工厂).4S店卖车首先要有车,这里只取日产

Net设计模式实例之简单工厂模式(Simple Factory Pattern)

一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖 二.解决的问题(What To Solve) 客户实例化对象时不需要关心该对象是由哪个子类实例化的. 三.简单工厂模式分析(Analysis) 1.简单工厂模式结构 IProduct接口:抽象产品类 ConcreteProduct类:产品类的具体实现 Simp

Simple Factory Pattern(简单工厂模式)

简单工厂(Simple Factory)模式: Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Factory模式实际上不是GoF 23个设计模式中的一员. 简单工厂模式的结构: 工厂(Factory): 工厂类在客户端的直接控制下(Create方法)创建产品对象. 产品(Product): 定义简单工厂创建的对象的父类或它们共同拥有的接口.可以是一个类.抽象类或接口. 具体产品(ConcreteP

简单工厂模式(simple factory pattern)

简单工厂模式是由一个工厂对象来决定创建出哪一种产品类的实例(对象),就是由一个工厂类根据传入的参数来决定需要创建哪一种产品的对象或实例. 此模式主要涉及到工厂角色,抽象产品,具体产品三个角色 工厂类(Creator),此模式的核心,含有与应用紧密相关的商业逻辑, 抽象产品(Product),担任需要创建产品的父类,一般由一个java接口事抽象类来实现 具体产品(Concrete Product),需要创建的产品的实例 源代码如下: 1:抽象产品 public interface Fruit {

设计模式之简单工厂模式Simple Factory(四创建型)

工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory,又称静态工厂方法模式 2.工厂方法模式Factory Method,又称多态性工厂模式 3.抽象工厂模式Abstract Factory,又称工具箱模式 2.什么是简单工厂模式 简单工厂模式是类的创建模式.是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现.由一个工厂

设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂模式在cocos2d-x中怎么用,我们通过下面的小例子来了解一下. 假如我们在开发一款类似魔兽的RPG游戏,在游戏中会出现很多种族的角色,如:人族.兽族. 这些种族一般都会定义为一个类,如果兽族Orc类,人族Human类. 兽族.人族两个类都同样属于种族,那么我们可以

设计模式之工厂模式(Factory Pattern)

一.什么是工厂模式? 1.“简单工厂模式”,Simple Factory Pattern 也就是常用的在Factory类中定义静态方法负责new对象的方式. 摘要中提到过“严格地说,这种被称为“简单工厂模式”的方式根本不能称之为“模式””,虽然静态工厂方法并不是真正的“设计模式”,但这种方式的应用也很广泛,也能带来一些好处,所以我们不能因为它不是“设计模式”就抛弃它. 2.工厂方法模式,Factory Method Pattern 是工厂模式的核心 定义一个抽象的“工厂方法”来负责new对象,由

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool